Docker で起動している MySQL にて mysqldump コマンドを実行したら Can't connect to local MySQL server through socket '/tmp/mysql.sock' エラーが出たとき

結論

mysqldump コマンドで具体的にソケットの場所を以下のように指定します。ソケットファイルは MySQL のデータディレクトリに存在しています*1

デフォルトではホストのマシンにインストールされている MySQL のソケットファイルを見に行こうとするのでエラーが出ます。したがって、明示的に「Docker で起動している MySQL の」ソケットファイルを指定します。

$ mysqldump -h localhost -p -u foo my_database > my_database.dump -S /path/to/mysql_data_dir/mysql.sock

補足

上記のコマンドは本質のコマンドだけをできるだけ簡潔に書いているので、single-transaction とか skip-lock-tables とかのオプションは適宜付与してください。

*1:ので、ボリュームでホストマシンと共有するように指定しておくと楽です

Powered by はてなブログ