7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mysqlコマンドでDockerのMySQLに接続できない! (Can't connect to local MySQL server through socket ...)

Last updated at Posted at 2023-08-14

ローカルの開発環境で動いているはずのMySQLにmysqlコマンドで接続しようとして、 Can't connect to local MySQL server through socket と言われたとき。

$ mysql -u root -p -h localhost -P 13306 DBNAME
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

MySQLが動いてなかったり、あるはずのソケットファイルがなんらかの理由で見つからない場合にこのエラーになります。

Dockerコンテナで動かしているMySQLにホスト側からmysqlコマンドで接続しようとしている場合にもこのエラーになることがあります。DockerでMySQLを動かすと、ソケットファイルはマウントしない限りホスト側から見えないためです。

そんなときは --protocol=tcp を付ければ接続できます。

$ mysql -u root -p -h localhost -P 13306 --protocol=tcp DBNAME

mysqlコマンドはlocalhostの場合にソケットファイルで通信しようとすることがあるようです。-Pを付ければTCPで通信してくれそうなものをそれでもソケットファイルを探すケースがありました。DockerでMySQLを動かすときはソケットファイルをマウントしていなければTCPで通信する必要がありますので、--protocol=tcpを明示的に指定します。

本題に関係ないけど補足説明

mysqlコマンドのオプション

  • -u: MySQLユーザ名を指定
  • -p: パスワードをプロンプトで入力することを指定
  • -h: 接続先ホスト名
  • -P: ポート番号を指定(デフォルトの3306から変えている場合に指定)
7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?