発生した問題
dockerで立ち上げたmysqldにローカルで接続しようとした場合、ローカルだからとホスト名を指定しなかったり、localhost
で接続しようとすると例えば下記エラーが発生する。
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
解決方法
解決方法は、例えば以下のようにしてlocalhost
を利用した接続を行わないようにすること。
mysql --host=127.0.0.1 # /etc/hostsに127.0.0.1を指示するlocalmysqlを追加した上で以下のようにしてもよい mysql --host=localmysql
原因とか。
mysqlは、localhostを利用した接続に際してはUNIXドメインソケットを利用した通信を試みる。 でも、dockerで起動したデーモンの場合はローカルではあるものの、ファイルシステムが切り分けられているから、UNIXドメインソケットを利用した通信が可能にはなっておらず、接続できない。また、接続先ホスト名を省略した場合にはlocalhostを指定したものと解釈されるので、ホスト名省略した場合も同様の問題が起きる。
他方、接続先がlocalhostではない場合にはmysqlはTCP/IPを利用した通常の通信を試みる。この場合には上記問題は生じず、接続が成功できる。
という仕組み、らしい。