できない.dev

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 socketERROR 2003 (HY000): Can't connect to MySQL server on 'host' は、クライアントが MySQL サーバーに到達できないときに出る。

2002 は Unix ソケット経由、2003 は TCP 経由の接続失敗。
括弧内の 10061(Windows)や 111(Linux)は OS 側のエラー番号。
まず mysqld が起動しているかを確認するのが切り分けの起点。

よくある原因

  1. サーバー未起動: mysqld が起きていない、または別ポートで待ち受けている。
  2. ソケットパス違い: localhost は TCP ではなく Unix ソケットを使うため、パスがずれると 2002 になる。
  3. ポート遮断: 3306 がファイアウォールで塞がれていると 2003 になる。
  4. 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 -p

localhost は 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.cnfbind-address を見直し、ファイアウォールで 3306 を開放する。
公開範囲は必要最小限にする。

この記事は役立ちましたか?