どうも、nippa です。
Docker で MySQL の環境構築のテストをしていたんですが、アクセスできない問題が起き たので備忘録として記事に残しておきます。
今回は MySQL の以下のエラーについてです。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
環境
発生事象の状況
Docker で MySQL のコンテナを作成し、起動後にホストから mysql クライアントでアク セスした際にアクセスできない問題です。
# アクセスコマンド mysql -u [user名] -h localhost -p
エラーの詳細は以下の通りです。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
結論
結論を先に述べると MySQL は localhost という名前のホスト名で外部からのアクセスを デフォルトでは禁止していることが原因でした。
そのため、localhost
の代わりに127.0.0.1
でアクセスすることでアクセス可能にな
ります。
# アクセスコマンド mysql -u [user名] -h 127.0.0.1 -p
サーバに直接 MySQL をインストールする場合には、起こり得ない問題で、
Docker MySQL 特有の問題になります。
Docker MySQL ではlocalhost
でのアクセスは禁止されているということを覚えておきま
す。
結論に至るまでの確認事項
- コンテナが起動していない可能性
コンテナが起動していない場合はレスポンスがないので、そもそもデータベースからエラ ーが返って来ないため、今回の事象の原因ではありません。
コンテナが起動していない場合は、timeout 表示がされます。
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.0:3306' (60)
- パスワード間違い
パスワード間違いの場合は、以下のエラーになります。
ERROR 1045 (28000): Access denied for user '[ユーザー名]'@'172.0.0.1' (using password: YES)
- コンテナにアクセスして、データベースへのログイン確認
以下の場合だと、localhost でアクセスできることを確認しました。
docker run -it [コンテナ名] /bin/bash mysql -u [user名] -h localhost -p
ホスト名が怪しいと考えられます。
- ログの確認
docker MySQL のデフォルトでは log が出力されない設定でした。
設定ファイルに log の出力設定を追加すれば確認できますが、今回は行いませんでした 。
参考までにmy.cnf
の場所です。
/etc/mysql/my.cnf
感想
Docker MySQL の環境を準備していて、はまった落とし穴でした。
あまり MySQL を触ってこなかったこともあり、少し時間がかかってしまいましたが、問 題の原因まで確認できたので、よかったとしましょう。
落とし穴にはまらないようにご注意ください。
ではでは、また次回。