
MySQL サーバーに localhost 経由では接続できるのに、127.0.0.1 経由では接続できない場合、どのようなエラーが発生する可能性があるかご存知の方はいらっしゃいますか? 私の知る限り、これらは同じようにルーティングされるはずであり、IP を使用するときに追加の TCP レイヤーは作成されないはずです。
$ mysql -u root -h localhost -D test # works
$ mysql -u root -h 127.0.0.1 -D test # does not work
(127.0.0.1 does map to localhost/vice versa)
テーブルの権限は、両方の方法を含むように明示的に設定されています。
答え1
MySQL クライアント ライブラリは、localhost をオーバーライドして、127.0.0.1 への TCP/IP 接続ではなく Unix ソケットを使用します。localhost には接続できるが 127.0.0.1 には接続できない場合は、ファイアウォールで保護されているか、127.0.0.1 でリッスンしていないことが考えられます。
答え2
マニュアルはMySQLサーバーへの接続次の構文を使用することを提案します:
shell> mysql --host=127.0.0.1
説明は次のとおりです:
Unix では、MySQL プログラムはホスト名 localhost を特別に扱いますが、その方法は他のネットワークベースのプログラムと比べて予想と異なる可能性があります。localhost への接続の場合、MySQL プログラムは Unix ソケット ファイルを使用してローカル サーバーに接続しようとします。これは、ポート番号を指定するために --port または -P オプションが指定されている場合でも発生します。クライアントがローカル サーバーに TCP/IP 接続を確立するようにするには、--host または -h を使用して、ホスト名の値 127.0.0.1、またはローカル サーバーの IP アドレスまたは名前を指定します。--protocol=TCP オプションを使用して、localhost の場合でも接続プロトコルを明示的に指定することもできます。例:
答え3
MySQL クライアントは、提供されたホストからプロトコルを推測します。
特定の接続では、トランスポート プロトコルが明示的に指定されていない場合は暗黙的に決定されます。たとえば、localhost への接続は、Unix および Unix 系システムではソケット ファイル接続になり、それ以外の場合は 127.0.0.1 への TCP/IP 接続になります。
ソース:MySQL ドキュメント
127.0.0.1
としてサーバーに接続できない場合はホストおそらく、サーバーが TCP ポートまたはポート 3306 (指定されていない場合のデフォルト) で実行されていないことを意味します。その場合は、ソケット ファイル経由でのみサーバーに接続できます。