MySQL、localhostだとポート指定オプション効かないってマジですか。。
検証用のMySQLデータベースをせっかくなのでDockerコンテナで作ったら、接続できないという事態。
docker run -d -p 13306:3306 --name mysql-for-local mysql-for-local
こんな感じでコンテナを起動して
mysql -u root -D my_db -h localhost -P 13306 -A
こんな感じで接続しようとしても繋がらない。。 正確にはローカルのMySQLに繋がってしまう。
docker exec -ti mysql-for-local /bin/bash
して、コンテナ内部でmysqlに接続するとちゃんと繋がる。
もしかして、-Pオプションが効いてない?と思ってぐぐってみたら、まさかそのとおりでした。。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.2.2 MySQL サーバーへの接続
Unix では、MySQL プログラムはホスト名 localhost を、ほかのネットワークベースのプログラムと比較して想定されるのとはおそらく異なる、特別な方法で扱います。localhost への接続で、MySQL プログラムは Unix ソケットファイルを使用してローカルサーバーに接続しようとします。これは、ポート番号を指定するために --port または -P オプションが与えられた場合にも生じます。クライアントがローカルサーバーに TCP/IP 接続を行うことを保証するには、--host または -h を使用して、ホスト名の値 127.0.0.1、またはローカルサーバーの IP アドレスまたは名前を指定します。--protocol=TCP オプションを使用して、localhost に対しても、接続プロトコルを明示的に指定することもできます。
localhostをIP指定することで無事解決できました。
mysql -u root -D my_db -h 127.0.0.1 -P 13306 -A
ちなみに、後で知ったのですがMySQLではFAQらしいです。