155

テスト スイート中にローカルの MySQL サーバーに接続しようとすると、次のエラーで失敗します。

OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")

mysqlただし、コマンド ラインプログラムを実行することで、いつでも MySQL に接続できます 。Aps aux | grep mysqlはサーバーが稼働している stat /tmp/mysql.sockことを示し、ソケットが存在することを確認します。exceptさらに、その例外の節でデバッガーを開くと、まったく同じパラメーターで確実に接続できます。

この問題はかなり確実に再現されますが、100% ではないように見えます。ブルー ムーンに 1 回、テスト スイートが実際にこのエラーに遭遇することなく実行されるためです。実行しようとするとsudo dtruss再現しませんでした。

すべてのクライアント コードは Python で書かれていますが、それがどのように関連するのかはわかりません。

ホストを使用するように切り替えると127.0.0.1、次のエラーが発生します。

DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)
4

33 に答える 33

167
sudo /usr/local/mysql/support-files/mysql.server start 

これは私にとってはうまくいきました。ただし、これが機能しない場合は、mysqld が実行されていることを確認して接続を試みてください。

于 2013-09-17T06:36:49.640 に答える
29

I've seen this happen at my shop when my devs have a stack manager like MAMP installed that comes preconfigured with MySQL installed in a non standard place.

at your terminal run

mysql_config --socket

that will give you your path to the sock file. take that path and use it in your DATABASES HOST paramater.

What you need to do is point your

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test',
        'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',
        'PORT': '',
    },
}

NOTE

also run which mysql_config if you somehow have multiple instances of mysql server installed on the machine you may be connecting to the wrong one.

于 2013-05-09T16:35:41.917 に答える
26

HOSTをからlocalhostに変更しただけで、127.0.0.1正常に動作します。

# settings.py of Django project
...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '',
},
...
于 2017-03-07T15:53:20.037 に答える
14

Mac OSx でデーモン mysql を失ったが、private/var などの他のパスに存在する場合は、次のコマンドを実行します。

1)

ln -s /private/var/mysql/mysql.sock /tmp/mysql.sock

2) mysql への接続を次のように再起動します。

mysql -u username -p -h host databasename

mariadbでも機能します

于 2013-08-24T11:55:08.160 に答える
9

ターミナルで以下のコマンドを実行します

/usr/local/mysql/bin/mysqld_safe

ここに画像の説明を入力

次に、マシンを再起動して有効にします。できます!!

于 2015-01-22T11:12:29.563 に答える
8

これらのソリューションのいくつかを試して成功しなかった後、これが私にとってうまくいきました:

  1. システムを再起動する
  2. mysql.server の開始
  3. 成功!
于 2015-10-29T18:31:20.200 に答える
8

自作で 5.7 から 8.0 にアップグレードした場合、このエラーはアップグレードが完了していないことが原因である可能性があります。私の場合、mysql.server start次のエラーが発生しました。

エラー!PID ファイルを更新せずにサーバーが終了しました

次に、経由でログ ファイルを確認したcat /usr/local/var/mysql/YOURS.err | tail -n 50ところ、次のことがわかりました。

InnoDB: クラッシュ後のアップグレードはサポートされていません。

同じボートに乗っている場合は、最初mysql@5.7に自作でインストールし、サーバーを停止してから、8.0 システムを再起動します。

brew install mysql@5.7

/usr/local/opt/mysql@5.7/bin/mysql.server start
/usr/local/opt/mysql@5.7/bin/mysql.server stop

それで、

mysql.server start

これにより、MySQL (8.0) が再び機能するようになります。

于 2018-07-13T00:43:32.700 に答える
7

lsof コマンドを使用して、mysql プロセスの開いているファイルの数を確認します。

開いているファイルの制限を増やして、もう一度実行してください。

于 2013-05-06T13:06:53.497 に答える
7

これは、次のいずれかの問題である可能性があります。

  1. mysql ロックが正しくありません。解決策: 次の方法で、正しい mysql ソケットを見つける必要があります。

mysqladmin -p 変数 | grep ソケット

そしてそれをあなたのdb接続コードに入れます:

pymysql.connect(db='db', user='user', passwd='pwd', unix_socket="/tmp/mysql.sock")

/tmp/mysql.sock は grep から返されたものです

2.誤った mysql ポートの解決策: 正しい mysql ポートを見つける必要があります。

mysqladmin -p variables | grep port

そして、あなたのコードで:

pymysql.connect(db='db', user='user', passwd='pwd', host='localhost', port=3306)

3306 は、grep から返されたポートです。

最初のオプションで問題が解決すると思います。

于 2013-05-09T15:25:50.723 に答える
5

私はこれについて2つの卑劣な推測を持っています

推測#1

/tmp/mysql.sockファイルにアクセスできない可能性を調べてください。MySQL データベースをセットアップするとき、通常はソケット ファイル サイトを/var/lib/mysql. として mysql にログインする場合root@localhost、OS セッションは/tmpフォルダーにアクセスする必要があります。/tmpOS で正しいアクセス権があることを確認します。また、sudo ユーザーが常にファイルを読み取れるようにしてください/tmp

推測#2

127.0.0.1注意を怠ると、 経由で mysql にアクセスすると、混乱が生じる可能性があります。どのように?

コマンドラインから を使用して MySQL に接続する場合127.0.0.1、TCP/IP プロトコルを指定する必要がある場合があります。

mysql -uroot -p -h127.0.0.1 --protocol=tcp

またはDNS名を試してください

mysql -uroot -p -hDNSNAME

これにより、 としてのログインが回避されますが、定義済みroot@localhostであることを確認してください。root@'127.0.0.1'

次回 MySQL に接続するときは、次を実行します。

SELECT USER(),CURRENT_USER();

これはあなたに何を与えますか?

  • USER()は、MySQL で認証を試みた方法を報告します
  • CURRENT_USER()は、MySQL で認証が許可された方法を報告します

これらの関数が同じ値を返す場合、期待どおりに接続して認証しています。値が異なる場合は、対応するユーザーを作成する必要がある場合がありますroot@127.0.0.1

于 2013-05-10T21:23:41.457 に答える
4

/etc/hosts が含まれていることを確認してください。127.0.0.1 localhost正常に動作するはずです

于 2013-05-04T21:33:53.970 に答える
3

これと同じ問題がありました。実行が停止していたことが判明しmysqldました(私はMac OSXを使用しています)。再起動したところ、エラーはなくなりました。

mysqldこのリンクのために、それがほとんど実行 されていないことがわかりました: http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.html

最初のヒントに注意してください!

于 2014-06-17T20:16:53.590 に答える
2

mysql が最大接続数に達していないこと、または my.cnf の設定が正しくない場合に頻繁に発生する、ある種の起動ループになっていないことを確認してください。

ps aux | を使用します。mysql を grep して、PID が変更されているかどうかを確認します。

于 2013-05-06T19:14:43.647 に答える
2

オンラインで見回しすぎて、貢献できませんでした。コマンド ラインから mysql プロンプトを入力しようとした後、次のメッセージを受け取り続けました。

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

これは、ローカルの mysql サーバーが実行されなくなったためです。サーバーを再起動するために、次の場所に移動しました

shell> cd /user/local/bin

私のmysql.serverがあった場所。ここから、次のように入力します。

shell> mysql.server start

これにより、ローカル mysql サーバーが再起動されます。

そこから、必要に応じて root パスワードをリセットできます。

mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
->                   WHERE User='root';
mysql> FLUSH PRIVILEGES;
于 2014-04-04T01:32:20.507 に答える
1

ソケットは /tmp にあります。Unix システムでは、/tmp のモードと所有権が原因で、これにより問題が発生する可能性があります。しかし、あなたが mysql 接続を正常に使用できると言う限り、あなたのシステムには問題がないと思います. 最初のチェックは、より中立的なディレクトリに mysql.sock を再配置することです。

問題が「ランダムに」(または毎回ではなく)発生するという事実から、サーバーの問題である可能性があると思います。

  • あなたの /tmp は標準ディスクにありますか、それとも特殊なマウント (RAM など) にありますか?

  • /tmp は空ですか?

  • iotop問題が発生したときに何か問題があることを示していますか?

于 2013-05-09T15:35:08.393 に答える
1

Homebrew でインストールした場合は、実行してみてください

brew services start mysql
于 2020-07-12T21:03:31.523 に答える
0

私は最近同様の問題に直面していました。多くの答えを経験しました。次の手順で動作するようになりました。

  1. /etc/my.cnf のソケット パスを変更します ( /tmp/mysql.sock で繰り返しエラーが発生したため)ソケット パスを変更するための参照
  2. エラーが発生した場合に推奨される再起動方法であるため、mysqld_safe を実行してサーバーを再起動します。mysqld_safe への参照
于 2020-04-10T12:24:12.547 に答える
0

実行してみてくださいmysqld

これは、Macで私にとってうまくいかなかったものでした。うまくいかない場合は、 にアクセスし/usr/local/var/mysql/<your_name>.errて詳細なエラー ログを確認してください。

于 2017-09-02T21:10:14.813 に答える