16

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@baster ~]# mysql -uroot -p -P3000
パスワードを入力する:
MySQL モニターへようこそ。コマンドは ; で終わります。または \g.
MySQL 接続 ID は 19 です
サーバーのバージョン: 5.0.77 ソース配布

「ヘルプ;」と入力します。または '\h' でヘルプが表示されます。'\c' と入力してバッファをクリアします。

mysql> testdb を使用します。
データベースが変更されました
mysql>

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

>>> db = MySQLdb.connect(user='root', passwd='', port=3000, host='localhost', db='pyneoform')
トレースバック (最新の呼び出しが最後):
ファイル ""、1 行目、
Connect のファイル「/usr/lib64/python2.5/site-packages/MySQLdb/__init__.py」の 74 行目
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.sock' (2) を介してローカル MySQL サーバーに接続できません」)
>>>

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

4

7 に答える 7

53

に変更localhostすると、次127.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 ポートをリッスンしているサーバーがそれをピックアップできるようになります。hostが として指定されている場合localhost、Unix ソケットまたはパイプが使用されます。

于 2011-06-26T05:57:38.707 に答える
12

MySQL ソケットのパスをunix_socket='path_to_socket'どこに追加しますか。path_to_socket/var/run/mysqld/mysqld2.sock

于 2009-05-07T12:41:01.107 に答える
3

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

于 2010-07-14T22:58:58.357 に答える
3

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

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

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

于 2009-04-17T03:19:03.913 に答える
2

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

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

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

于 2011-01-25T01:26:52.473 に答える
0

私が知る限り、Python コネクタはインターネット ソケット経由でのみ mysql に接続できます。UNIX ソケット (コマンド ライン クライアントのデフォルト) はサポートされていません。

CLI クライアントでは、"-h localhost" と言うと、実際には localhost を "ああ、localhost? 代わりに unix ソケットに接続します" と解釈し、インターネット localhost ソケットではありません。

つまり、mysql CLI クライアントは魔法のようなことを行っており、Python コネクタは「一貫性はあるが制限的な」ことを行っています。

あなたの毒を選んでください。(しゃれは意図されていません;))

于 2009-09-03T23:19:53.017 に答える
-2

キーワード パラメータunix_socket = Noneを に追加してみてくださいconnect()

于 2009-04-17T03:07:36.157 に答える