web-dev-qa-db-ja.com

MySQLdb接続の問題

MySQLdbモジュールに問題があります。

db = MySQLdb.connect(
    Host = 'localhost', 
    user = 'root', 
    passwd = '', 
    db = 'testdb', 
    port = 3000)

(私はカスタムポートを使用しています)

私が得るエラーは次のとおりです。

エラー2002:ソケット '/var/lib/mysql/mysql.sock'を介してローカルMySQLサーバーに接続できません(2)

これはmy.confに設定されているデフォルトの接続であるため、あまり意味がありません。これは、私が提供する接続情報を無視しているようです。

Mysqlサーバーは間違いなくそこにあります:

 [root @ bather〜] #mysql -uroot -p -P3000 
パスワードを入力してください:
 MySQLモニターへようこそ。コマンドは;で終わりますまたは\ g。
 MySQL接続IDは19 
サーバーバージョン:5.0.77ソース配布
 
 Type'help; 'または「\ h」でヘルプを表示します。 「\ c」と入力してバッファをクリアします。
 
 mysql> use testdb; 
データベースが変更されました
 mysql> 

pythonプロンプトから直接試しました:

 >>> db = MySQLdb.connect(user = 'root'、passwd = ''、port = 3000、Host = 'localhost'、db = 'pyneoform')
トレースバック(最新最後に呼び出す):
ファイル ""、1行目
ファイル "/usr/lib64/python2.5/site-packages/MySQLdb/__init__.py"、74行目、Connect 
 return Connection(* args、** kwargs)
ファイル "/usr/lib64/python2.5/site-packages/MySQLdb/connections.py"、169行目、__ init __ 
 super(Connection、self).__ init __(* args、** kwargs2)
 _ mysql_exceptions.OperationalError:(2002、 "ソケット '/ var/lib/mysql/mysqlを介してローカルMySQLサーバーに接続できません。 sock '(2) ")
 >>> 

よくわかりません... :(

13
Ian

Mysqlサーバーがtcp接続をリッスンしていることを確認します。これはnetstat-nlp(* nix内)で実行できます。これは、確立しようとしている接続のタイプであり、dbは通常、セキュリティ上の理由から、デフォルトではネットワーク上でリッスンしません。また、mysqlコマンドを使用するときに--Host = localhostを指定してみてください。特に指定しない限り、これもunixソケットを介して接続しようとします。 mysqlがtcp接続をリッスンするようにnot構成されている場合、コマンドも失敗します。

これは、UNIXソケットと接続のトラブルシューティングに関する mysql 5.1マニュアル の関連セクションです。説明されているエラー(2002)は、発生しているエラーと同じであることに注意してください。

または、使用しているモジュールにUNIXソケット経由で接続するオプションがあるかどうかを確認します(Davidが提案しているように)。

3
Dana the Sane

localhost127.0.0.1に変更すると、MySQLdbを使用して問題が解決しました。

db = MySQLdb.connect(
    Host = '127.0.0.1', 
    user = 'root', 
    passwd = '', 
    db = 'testdb', 
    port = 3000)

127.0.0.1を使用すると、クライアントはTCP/IPを使用するようになり、TCPポートをリッスンしているサーバーがそれを取得できるようになります。Hostlocalhostとして指定されている場合、Unixソケットまたはパイプ使用されます。

50
garg

追加 unix_socket='path_to_socket' どこ path_to_socketはMySQLソケットのパスである必要があります。例: /var/run/mysqld/mysqld2.sock

11
Kalisky

この問題は、unixソケットファイルが別の場所にある場合に発生しました。pythonは存在しないソケットに接続しようとしました。unix_socketオプションを使用してこれを修正すると、機能しました。

3
thushara

Mysqlは、ホストが「localhost」の場合はソケットを使用し、ホストがそれ以外の場合はtcp/ipを使用します。デフォルトでは、Mysqlは両方をリッスンします。my.cnfファイルでソケットまたはネットワークのいずれかを無効にすることができます(詳細については、mysql.comを参照してください)。

あなたの場合、ポート= 3000を忘れてください。ローカルホストを使用していて、unix_socket = 'path_to_socket'のようにソケットを指定しているため、mysqlクライアントライブラリはそれに注意を払っていません。

このスクリプトを別のマシンに移動することにした場合は、実際のホスト名またはIPアドレスを使用するようにこの接続文字列を変更する必要があります。その後、unix_socketを緩めて、ポートを元に戻すことができます。 mysqlのデフォルトポートは3306です。そのポートを指定する必要はありませんが、使用しているポートである場合は3000を指定する必要があります。

1
Frank Flynn