42

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)」)

mysqlコマンドまたはphpMyAdminを使用して接続できるため、mysqldが実行されていることは確かです。さらに、Python 2 で MySQLdb を使用して、ほぼ同じコードで接続できます。

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

問題はMySQLではなくPyMySQL側にあるようですが、解決方法がわかりません。

4

9 に答える 9

68

2 つの推測:

  1. 実行mysqladmin variables | grep socketしてソケットの場所を取得し、次のように接続を設定してみてください。

    pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock")
    
  2. 実行mysqladmin variables | grep portして、ポートが 3306 であることを確認します。そうでない場合は、次のようにポートを手動で設定できます。

    pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX)
    
于 2013-01-16T05:01:28.603 に答える
6

以下に示すように、パスワードをMYSQLデータベースパスワードに置き換えlocalhostて変更することで問題を解決しました。127.0.0.1

conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'root',
    passwd = 'XXXXXXXXX',
    db = 'mysql'
)
于 2016-07-09T18:01:31.767 に答える
1

ソケットが機能するのにTCPが機能しない理由を尋ねたところbind-address、 in/etc/my.cnfが正しく設定されていなかったという答えが返ってきました。ソケットメソッドは正常に機能しますが、TCP メソッドは機能しないため、これも問題になる可能性があります。

于 2019-09-25T07:51:26.607 に答える