5

これについてStackOverflowで同様の質問がありましたが、まったく同じ状況は見つかりませんでした。これは、MySQLを使用するOSXLeopardマシン上にあります

いくつかの開始情報:

MySQL Server version        5.1.30
Apache/2.2.13 (Unix)
Python 2.5.1
mod_wsgi 3

mysqladminには、スキップネットワークもOFFとしてリストされています

Pythonコマンドラインからmysqlに接続できます。しかし、コピーアンドペーストされたコードを使用してmod_wsgiを介して、またはDjangoを介してそれを実行しようとすると、一般的な接続拒否が発生します

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (49)")

私はmysqlのマニュアルを見て、次のようなトラブルシューティングのヒントを試しました。

telnet localhost 3306

そして私接続を取得します。

私もrootとして接続しようとはしていません。

他に何を確認できるかについてのアイデアはありますか?前もって感謝します!

4

4 に答える 4

13

このエラーに遭遇しましたが、これは SELinux の拒否が原因でした。/usr/bin/httpd には、ポート 3306 に接続する権限がありませんでした。次の方法で問題を修正しました。

setsebool httpd_can_network_connect_db on

SELinux を無効にするだけでうまく機能し、より安全になるはずです。Avinash Meetoo が以下で指摘しているように、以下を使用できます。

setsebool -P httpd_can_network_connect_db

再起動後も selinux の変更が持続するようにします。

于 2011-04-05T12:50:24.437 に答える
1

Django でまったく同じエラー メッセージが表示されました。

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (49)")

これを修正するには、django 設定ファイルで明示的に mysql ポートを 3306 に設定する必要がありました。

于 2012-08-20T00:25:45.980 に答える
0

これについてはそれほど多くはありません。ランダムな推測ですが、使用してみてください:

DATABASE_HOST = 127.0.0.1 の代わりに 'localhost'

および/または my.ini でコメントアウトしてみてください:

バインドアドレス 127.0.0.1

試してみる価値。

于 2009-11-24T23:45:30.487 に答える
0

telnet接続が機能するのは少し奇妙です。たぶん、トラブルシューティングのいくつかの方法:

shell> perror 49
OS error code  49:  Can't assign requested address

最初に localhost インターフェイスを確認し、IPv4 アドレスがあるかどうかを確認します。とてつもないかもしれませんが、IPv6 を無効にしたときに問題が発生しました。

shell> ifconfig lo0

Apache/mod_wsgi/etc 内から名前解決が正しく機能しない可能性があります。

import python
print socket.gethostbyname('localhost')
print socket.gethostbyaddr('127.0.0.1')

多分あなたを動かすために(私がDjangoに貢献したもの)、DjangoでUNIXソケットを試してみてください。データベースホストをパスに設定すると機能します(スラッシュで始まります):

DATABASE_HOST = '/tmp/mysql.sock'

または、ソケットファイルがある場所。

最後に、IP アドレスまたはポートへのバインドに失敗したなどの奇妙なメッセージがあるかどうか、MySQL エラー ログを確認します。

これが少し役立つことを願っています。

于 2010-01-27T14:24:40.653 に答える