質問

私はLinuxミントを実行していて、この方法でmysqlに接続しようとしています

mysql --port=3306 -u root -p

その後、パスワードのために私に促します。これはすべて問題ありません。このようなものを入力すると、まだ機能します。

mysql --port=1234 -u root -p

ポート1234で実行されているMySQLサーバーがないため、失敗してはなりませんか?

私がこれを求めている理由は、SSHトンネルを作成して別のサーバーのデータベースに接続したいからです。 SSHトンネルがすべてのトラフィックをLocalHost:3308からMyRemoteserver:3306に転送するとしましょう。私のローカルMySQLサーバーはすべてのポートの接続を受け入れているため、実際にポート3308に接続してリモートサーバーを押すことはできません。私はまだローカルサーバーにヒットしています。

たとえSSHトンネルのオプションが間違っていたとしても、ポート1234に接続できる理由を誰かが知っていて、3306で実行されているローカルMySQLサーバーにヒットしたのだろうかと思っていました。

役に立ちましたか?

解決

IIRC MySQLは、LocalHostに接続する場合、UNIXソケットに接続します。この場合、TCPを介して接続しないため、ポートが関与しておらず、提供するポート番号は重要ではありません。

編集:これがすべてのシステムで当てはまるかどうかはわかりませんが、127.0.0.1またはLocalHostの代わりにホスト名を使用する場合、MySQLはTCPを介して接続し、ポート番号は重要です - 正しいポート番号のみに接続できます。

他のヒント

TCP接続の使用を強制します --protocol=TCP.

例:

最初にSSHトンネル

ssh -L 4000:localhost:3306 server.ch

次に、リモートMySQLサーバーに接続します

mysql -h localhost --port=4000 --protocol=TCP -u root -p

パスワードをお願いします 接続しようとします。パスワードを入力して(またはその他の点で何か)、それを続行させると、次のようなもので応答します。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock'

@titanoboa、thxこれ!私は同じ問題を抱えていました。追加するために、以下を使用してローカルホストでも実際にTCP接続を強制することができます

[client]
port = 3306 
socket = /var/run/mysqld/mysqld.sock 
protocol = TCP

乾杯

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top