MySQL で「Can't connect to MySQL server」(2002/2003) で接続できない
サーバー未起動、ソケット/ポート指定の誤り、bind-address やファイアウォールが原因。
2002 は Unix ソケット、2003 は TCP の接続失敗。
まず mysqld が起きているか確認する。
公開:
要約
ERROR 2002 (HY000): Can't connect to local MySQL server through socket や ERROR 2003 (HY000): Can't connect to MySQL server on 'host' は、クライアントが MySQL サーバーに到達できないときに出る。
2002 は Unix ソケット経由、2003 は TCP 経由の接続失敗。
括弧内の 10061(Windows)や 111(Linux)は OS 側のエラー番号。
まず mysqld が起動しているかを確認するのが切り分けの起点。
よくある原因
- サーバー未起動: mysqld が起きていない、または別ポートで待ち受けている。
- ソケットパス違い:
localhostは TCP ではなく Unix ソケットを使うため、パスがずれると 2002 になる。 - ポート遮断: 3306 がファイアウォールで塞がれていると 2003 になる。
- bind-address: 127.0.0.1 だけを待ち受けていると外部から繋がらない。
解決策
1. サーバーの起動を確認する
mysqladmin -u root -p ping
sudo systemctl status mysql停止していれば起動する。
まずここを確かめる。
2. localhost と 127.0.0.1 を使い分ける
mysql -h 127.0.0.1 -P 3306 -u root -plocalhost は Unix ソケット、127.0.0.1 は TCP。
ソケット由来の問題は 127.0.0.1 で回避できる。
3. ソケット/ポートを明示する
mysql --socket=/var/run/mysqld/mysqld.sock -u root -p設定ファイルの socket / port と一致するよう指定する。
4. リモート接続を許可する
my.cnf の bind-address を見直し、ファイアウォールで 3306 を開放する。
公開範囲は必要最小限にする。