MySQLサーバーに接続できないときのエラーメッセージ "ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)" の原因と解決方法
エラーメッセージ "ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)" の原因と解決方法
MySQLサーバーが起動していない場合、接続できません。まずは、MySQLサーバーが起動しているかどうかを確認しましょう。
確認方法:
- コマンドライン
systemctl status mysql
結果例:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2024-03-24 23:02:10 JST; 1min 22s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/8.0/en/mysqld.html
Process: 23456 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 23457 (mysqld)
CGroup: /system.slice/mysql.service
├─23457 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --log-error=/var/log/mysql/error.log
└─23458 /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid
上記のように、Active: active (running)
と表示されていれば、MySQLサーバーは起動しています。
解決方法:
MySQLサーバーが起動していない場合は、以下のコマンドで起動できます。
sudo systemctl start mysql
MySQLソケットファイルが存在しない、またはアクセス権限がない
MySQLサーバーは、ソケットファイルと呼ばれるファイルを使用してクライアントとの通信を行います。このファイルが存在しない、またはアクセス権限がない場合、接続できません。
- ソケットファイルの存在確認
ls /var/run/mysqld/mysqld.sock
/var/run/mysqld/mysqld.sock
上記のように、mysqld.sock
ファイルが存在すれば問題ありません。
ls -l /var/run/mysqld/mysqld.sock
srwxrwxrwx 1 mysql mysql 0 3月 24 23:02 /var/run/mysqld/mysqld.sock
上記のように、srwxrwxrwx
と表示されていれば、すべてのユーザーが読み書きできる権限が設定されています。
sudo touch /var/run/mysqld/mysqld.sock
sudo chown mysql:mysql /var/run/mysqld/mysqld.sock
sudo chmod 666 /var/run/mysqld/mysqld.sock
MySQLサーバーの設定ファイル my.cnf
に誤りがある場合、接続できません。
my.cnf
ファイルの場所は、以下のコマンドで確認できます。
mysqld --verbose --help | grep -e '^--defaults-file='
--defaults-file=/etc/mysql/mysql.conf.d/mysqld.cnf
- 設定ファイルの内容を確認し、誤りがないか確認します。
設定ファイルに誤りがある場合は、修正してMySQLサーバーを再起動します。
上記以外にも、ファイアウォールなどの設定が原因で接続できない場合があります。
- [ERROR 2002
使用しているプログラミング言語
例:PHP、Python、Javaなど
接続しようとしているデータベースの情報
- データベースの種類:MySQL、MariaDBなど
- ホスト名:localhost、127.0.0.1など
- ポート番号:3306など
- データベース名:testなど
- ユーザー名:rootなど
- パスワード:passwordなど
実行したい処理
- データの検索
上記の情報が揃えば、具体的なサンプルコードを作成できます。
LAMP環境でパスワードを忘れた場合の対処方法
MySQLコマンドラインツールを使用する
MySQLサーバーを停止する
sudo systemctl stop mysql
mysqld_safeコマンドを使用する
sudo mysqld_safe --skip-grant-tables &
パスワード変更
mysql
USE mysql;
UPDATE user SET password=PASSWORD('新しいパスワード') WHERE User='root';
FLUSH PRIVILEGES;
sudo systemctl start mysql
リカバリキーを使用する
MySQLインストール時に作成されたリカバリキーを使用してパスワードをリセットできます。
リカバリキーの確認
grep 'password' /etc/mysql/mysql.conf.d/mysqld.cnf
リカバリキーを使用してパスワードをリセットする
mysqld --init-file=/path/to/recovery-file
mysql
USE mysql;
UPDATE user SET password=PASSWORD('新しいパスワード') WHERE User='root';
FLUSH PRIVILEGES;
データベース管理ツールを使用する
phpMyAdminなどのデータベース管理ツールを使用してパスワードをリセットできます。
ブラウザで http://localhost/phpmyadmin
などと入力して、データベース管理ツールにアクセスします。
- ユーザータブを選択します。
- 編集ボタンをクリックします。
- パスワード欄に新しいパスワードを入力します。
その他
上記以外にも、OSや環境によって様々な方法があります。詳細は、以下の参考資料を参照してください。
上記の方法でうまくいかない場合は、専門家に相談することをおすすめします。
mysql lamp forgot-password