目次
はじめに
MySQL への接続ができず、アプリケーションや管理作業が止まってしまうトラブルはよく発生します。
特に以下のようなエラーで困るケースが多いです。
Access denied for user 'root'@'localhost'
Can't connect to local MySQL server through socket
Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (111)
本記事では、MySQL に接続できない代表的な原因と復旧手順を整理します。
よくある原因
MySQL 接続不可トラブルは大きく分けると次の 3 パターンです。
- 認証エラー(ユーザー名/パスワード不一致、権限不足)
- root やアプリ用ユーザーでログインできない
Access denied for user
が表示される
- ソケットエラー(UNIX ソケットファイル関連の問題)
Can't connect to local MySQL server through socket
/var/lib/mysql/mysql.sock
が存在しない/権限が不正
- ポートエラー(TCP/IP 接続関連の問題)
- ポート 3306 が開いていない
- ファイアウォールや SELinux により遮断
bind-address
の設定が不正
確認ポイント
接続できないときは、以下を順番に確認するのが効率的です。
1. MySQL サービス稼働確認
systemctl status mysqld
# または
systemctl status mysql
停止している場合は起動します。
sudo systemctl start mysqld
2. ログインユーザー/パスワード確認
- 正しいユーザーでログインしているか
- root 以外のユーザーでアプリから接続している場合、権限付与済みか
テスト接続:
mysql -u root -p
3. ソケットファイル確認
ls -l /var/lib/mysql/mysql.sock
存在しない場合は、設定ファイル /etc/my.cnf
の [mysqld]
/ [client]
の socket
の値を確認。
4. ポート確認
ss -ltnp | grep 3306
MySQL が 3306 番ポートで LISTEN しているか確認。
復旧手順
1. 認証エラーの復旧
- root パスワードを忘れた場合 → シングルユーザーモードでの初期化
sudo systemctl stop mysqld
sudo mysqld_safe --skip-grant-tables &
mysql -u root
# root パスワードをリセット
ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';
FLUSH PRIVILEGES;
- ユーザーに権限を付与
GRANT ALL PRIVILEGES ON データベース.* TO 'ユーザー名'@'ホスト' IDENTIFIED BY 'パスワード';
FLUSH PRIVILEGES;
2. ソケットエラーの復旧
- MySQL が起動していない → サービス起動
my.cnf
のソケット設定を統一
[mysqld]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
- アプリケーションの設定ファイルでも同じソケットパスを指定。
3. ポートエラーの復旧
- 設定ファイルで
bind-address
を確認- 外部から接続するなら
0.0.0.0
または サーバー IP を指定
- 外部から接続するなら
- ファイアウォール設定
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
- SELinux が有効な場合は許可設定
sudo setsebool -P mysql_connect_any=1
再発防止策
- root アカウントではなく、アプリ専用ユーザーを作成して利用
- 定期的にパスワードを更新し、忘れないように管理
- 接続情報はアプリ設定ファイルに暗号化して保存
- 監視ツール(Nagios, Zabbix など)で 3306 ポート死活監視を実施
まとめ
- MySQL 接続不可は 認証/ソケット/ポート の 3 つに分類できる
systemctl status
でサービス稼働確認から始めるのが効率的- 設定ファイルの統一とファイアウォール調整で解決するケースが多い
- 再発防止にはユーザー管理と監視体制の整備が重要