Ubuntu 16.04 LTS にて MySQL で期待通りのポート番号に接続する方法

「正しく」とは

ポート番号を指定した際に、そのポートに接続できたのならばその状態が「正しい」とします。つまり、「ポート 12345 の MySQL に接続するよ」として接続を試みて「ポート 12345 の MySQL に接続できた」なら、その状態は「正しい」です。当たり前のことではあります。

MySQL の複数インスタンスを作ろうと試行錯誤してた過程で、今さらなことを理解したので書き留めておきます。

MySQL にポート番号を指定して接続するコマンド

ご存知のとおり、--port=12345または-P 12345をオプションとして指定します。例えば以下のようになります。

$ mysql -u root -p -P 12345

正しくないポート指定

ところが上記のコマンドだとポート指定が意味をなしていません。

理由

公式ページのとおりです。すなわち、ホスト名を明示的に指定しなければいけなく、かつそのホスト名は localhostという指定ではダメ です。以下に説明を引用します。

ローカルサーバーへの接続にもポート番号を指定できます。ただし前述のように、Unix では localhost への接続にはデフォルトでソケットファイルが使用されます。前述のように TCP/IP 接続を強制しないと、ポート番号を指定するすべてのオプションは無視されます。
次のコマンドでは、Unix ではプログラムはソケットファイルを使用し、--port オプションは無視されます。

shell> mysql --port=13306 --host=localhost

ポート番号を使用するようにするには、プログラムを次のいずれかの方法で呼び出します。

shell> mysql --port=13306 --host=127.0.0.1
shell> mysql --port=13306 --protocol=TCP
Powered by はてなブログ