首页 文章

PyMySQL无法连接到localhost上的MySQL

提问于
浏览
27

我正在尝试使用PyMySQL连接到localhost上的MySQL:

import pymysql
conn = pymysql.connect(db='base', user='root', passwd='pwd', host='localhost')

但是(在Python 2.7和Python 3.2上)我得到错误:

socket.error:[Errno 111]连接被拒绝pymysql.err.OperationalError:(2003,“无法连接到'localhost'上的MySQL服务器'(111)”)

我确定mysqld正在运行,因为我可以使用mysql命令或phpMyAdmin进行连接 . 而且,我可以使用几乎相同的代码在Python 2上使用MySQLdb进行连接:

import MySQLdb
conn = MySQLdb.connect(db='base', user='root', passwd='pwd', host='localhost')

似乎问题出在PyMySQL方面而不是MySQL上,但我不知道如何解决它 .

4 回答

  • 44

    似乎更改 localhost127.0.0.1 修复了错误,至少在我的配置中 . 如果没有,我会在 tcp sockets connection 中查找错误,当然,将其作为 pymysql bugtrack中的错误发布 .

  • 8

    两个猜测:

    • 运行 mysqladmin variables | grep socket 以获取套接字所在的位置,并尝试设置如下连接:
    pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock")
    
    • 运行 mysqladmin variables | grep port 并验证端口是否为3306.如果没有,您可以手动设置端口,如下所示:
    pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX)
    
  • 4

    我通过将 localhost 替换为 127.0.0.1 并将密码更改为我的MYSQL数据库密码来解决了这个问题,如下所示;

    conn = pymysql.connect(
        host = '127.0.0.1',
        port = 3306,
        user = 'root',
        passwd = 'XXXXXXXXX',
        db = 'mysql'
    )
    
  • 0

    您还需要将端口添加到连接 . 试试这个,它工作正常 .

    pymysql(Module Name).connect(host="localhost", user="root", passwd="root", port=8889, db="db_name")
    

相关问题