エラー: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- /var/run/mysqld/mysqld.sockがない。

私の問題は、mysqlのインストールでrootとしてログインできなくなったことから始まりました。 パスワードを設定せずにmysqlを実行しようとしたのですが...コマンドを実行するたびに

# mysqld_safe --skip-grant-tables &

プロンプトが表示されません。私は、パスワードを回復するためのこれらの指示に従おうとしていました。

画面はちょうどこのようになっています。

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

と表示され、パスワードをリセットするためのSQLコマンドを入力するプロンプトが表示されません。

また、CTRL + C を押して終了させると、以下のメッセージが表示されます。

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

コマンドを再試行し、十分に時間を置くと、確かに以下の一連のメッセージが表示されます。

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

しかし、ルートとしてログインしようとすると、次のようになります。

# mysql -u root

以下のようなエラーメッセージが表示されます。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

確認したところ、/var/run/mysqld/mysqld.sock ファイルが存在しませんでした。フォルダは存在しますが、ファイルは存在しません。

また、役に立つかどうかわかりませんが、find / -name mysqldを実行したところ、次のように出てきました。

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

私はLinuxもMySQLも初めてなので、これが普通なのかどうかはわかりません。しかし、参考になればと思い、この情報を掲載します。

ついにmysqlをアンインストールして再インストールすることにしました

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

すべてのパッケージを上記と同じ順番で再インストールした後、phpmyadminのインストール中に、同じエラーが発生しました。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

そこで、再度、アンインストール/再インストールを試みました。今回は、パッケージをアンインストールした後、すべてのmysqlファイルとディレクトリの名前をそれぞれの場所で手動でmysql.badに変更しました。

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

その後、mysql-servermysql-clientを再度インストールしようとしました。 しかし、パスワードの入力を求められないことに気がつきました。 管理者のパスワードを要求するようになっているのではないでしょうか?

ソリューション

システム上のすべてのソケットファイルを見つけるには、次のように実行します。

sudo find / -type s

私の Mysql サーバシステムでは、/var/lib/mysql/mysql.sock でソケットを開いていました。

ソケットが開かれている場所がわかったら、/etc/my.cnfファイルにソケットファイルのパスを記述した行を追加または編集してください。

socket=/var/lib/mysql/mysql.sock

コマンドラインの実行ファイルを起動したシステムスタートアップスクリプトが、--socket=pathというフラグを指定している場合があります。このフラグがmy.cnfの場所を上書きしてしまうと、my.cnfファイルが示す場所にソケットが見つからなくなってしまいます。 そうすると、mysqlコマンドラインクライアントを実行しようとすると、ソケットを見つけるためにmy.cnfを読みますが、サーバが作成した場所から外れているため、ソケットが見つかりません。 そのため、ソケットがどこにあるかを気にしないのであれば、my.cnfを一致するように変更するだけで動作するはずです。

次に、mysqld プロセスを停止します。 これをどのように行うかはシステムによって異なります。

もしあなたがLinuxシステムのスーパーユーザーなら、あなたのMysqlセットアップが使用している特定の方法がわからない場合は、以下のいずれかを試してみてください。

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown.
  • システムによっては、mysql を停止するエレガントな方法が設定されていない場合(または何らかの理由で mysql が応答しない場合)、以下のいずれかの方法で mysql を強制終了させることができます。
    • 1ステップ:pkill -9 mysqld
    • 2 ステップ(最も好ましくない)。
      • pgrep mysql または ps aux | grep mysql | grep -v grep のいずれかで mysql のプロセス ID を見つける。
      • プロセス ID が 4969 である場合、kill -9 4969 で終了する。

この後、/var/run/mysqld/ にある pid ファイルを探して削除するとよいでしょう。

ソケットのパーミッションが、mysqld を実行しているどのユーザでも読み書きできるようになっていることを確認します。 簡単なテストとしては、ソケットを完全に読み書きできるようにして、それでも動作するかどうかを確認します。

chmod 777 /var/run/mysqld/mysqld.sock

これで問題が解決したら、セキュリティ設定に基づいて必要に応じてソケットのパーミッションやオーナーシップを調整することができます。

また、ソケットが存在するディレクトリには、mysqldプロセスを実行しているユーザが到達できる必要があります。

解説 (13)

解決方法はもっと簡単です。

1.まず、mysql.sockファイルがどこにあるかを確認します(ターミナルで "sudo find / -type s")。私の場合は /opt/lampp/var/mysql/mysql.sock にありました。 2.ターミナルを起動して sudo Nautilus<br> これで、スーパーユーザ権限でファイルマネージャが起動します。 3.3. Nautilusからmysql.sockファイルがある場所に移動します。 4.ファイルの上で右クリックし、*Make Link*を選択します。 5.リンクファイルの名前をmysqld.sockに変更し、ファイルを右クリックして *Cut* します。 6.6./var/runに移動して、mysqldという名前のフォルダを作成し、それを入力します。 7.リンクファイルを右クリックして、*貼り付けます。 8.ほら!これで/var/run/mysqld/mysqld.sockmysqld.sock` ファイルができあがりました :)

解説 (7)

私も同じエラーに直面し、パッケージのアップグレードが原因であることがわかりましたので、システムを再起動したところ、エラーは解決しました。

SQLライブラリやパッケージのアップデートが原因でエラーが発生したのだと思いますので、アップグレードをする際にはこの方法を試してみてください :)

解説 (1)