1. ホーム
  2. mysql

[解決済み] error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Missing /var/run/mysqld/mysqld.sock

2022-03-25 04:58:09

質問

私の問題は、私の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#

とやってrootでログインしようとすると。

# 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 を強制終了することができます。
    • ワンステップ pkill -9 mysqld
    • 2段階(最も好ましくない)。
      • mysqlのプロセスIDを以下のどちらかで検索してください。 pgrep mysql または ps aux | grep mysql | grep -v grep
      • プロセスIDが 4969 で終了させます。 kill -9 4969

この後、pid ファイルを /var/run/mysqld/ を削除してください。

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

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

これで問題が解決した場合は、セキュリティ設定に基づいて、必要に応じてソケットの権限と所有権を調整することができます。

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