IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Docker MySQLのアクセスエラーについて

どうも、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)

結論

結論を先に述べると MySQLlocalhost という名前のホスト名で外部からのアクセスを デフォルトでは禁止していることが原因でした。

そのため、localhost の代わりに127.0.0.1でアクセスすることでアクセス可能にな ります。

# アクセスコマンド
mysql -u [user名] -h 127.0.0.1 -p

サーバに直接 MySQL をインストールする場合には、起こり得ない問題で、

Docker MySQL 特有の問題になります。

Docker MySQL ではlocalhostでのアクセスは禁止されているということを覚えておきま す。

結論に至るまでの確認事項

  1. コンテナが起動していない可能性

コンテナが起動していない場合はレスポンスがないので、そもそもデータベースからエラ ーが返って来ないため、今回の事象の原因ではありません。

コンテナが起動していない場合は、timeout 表示がされます。

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.0:3306' (60)
  1. パスワード間違い

パスワード間違いの場合は、以下のエラーになります。

ERROR 1045 (28000): Access denied for user '[ユーザー名]'@'172.0.0.1' (using
password: YES)
  1. コンテナにアクセスして、データベースへのログイン確認

以下の場合だと、localhost でアクセスできることを確認しました。

docker run -it [コンテナ名] /bin/bash

mysql -u [user名] -h localhost -p

ホスト名が怪しいと考えられます。

  1. ログの確認

docker MySQL のデフォルトでは log が出力されない設定でした。

設定ファイルに log の出力設定を追加すれば確認できますが、今回は行いませんでした 。

参考までにmy.cnfの場所です。

/etc/mysql/my.cnf

感想

Docker MySQL の環境を準備していて、はまった落とし穴でした。

あまり MySQL を触ってこなかったこともあり、少し時間がかかってしまいましたが、問 題の原因まで確認できたので、よかったとしましょう。

落とし穴にはまらないようにご注意ください。

ではでは、また次回。