28

2 つのサーバーABの間に SSH トンネルをセットアップしました。BにはMySQLサーバーがあり、これは機能します:

mysql -h localhost -P 3306 -u user -p

これはしませんが:

mysql -h 127.0.0.1 -P 3306 -u user -p

my.cnf には次の行がありますが:

bind-address        = 127.0.0.1
# Next addr differs slightly, but anyway
bind-address        = 99.99.99.99

さて、トンネルについて。以下を接続します:(A) localhost(9989) -> (B) localhost(3306) しかし、(Aで、ポートが転送された状態で)私がするとき

mysql -v -h 127.0.0.1 -P 9989 -u user userdb -p

私は得るERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

そして、私がするとき

mysql -v -h localhost -P 9989 -u user userdb -p

私は得るERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES)

その理由は何ですか?私は何を間違っていますか?

4

6 に答える 6

31

ここには 3 つの問題があります。

1 - 今のところ SSH トンネルのことは忘れてください

MySQL を複数の特定の IP にバインドすることはできません。最初のbind-address句は、2 番目の句によって上書きされます (したがって、無視されます)。サーバーは のみをリッスンし99.99.99.99ます。

-h localhost接続できるのに接続できない理由-h 127.0.0.1は、最初の形式では、実際には TCP/IP を介して接続するのではなく、ローカル ソケットを介して接続するためです。

my.cnfを探してください。socket

冗長なbind-address句を 1 つ削除します。を使用するbind-address=0.0.0.0と、MySQL デーモンにすべてのネットワーク インターフェイスをリッスンするように指示できます。

2 - SSH トンネルをセットアップしましょう

あなたのエラーの理由はERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0私には明らかではありません。SSH トンネルが実際に確立されるのは、接続要求を受信したとき (この場合は、クライアントを実行したとき) だけだと思われます。mysqlサーバーは 127.0.0.1 をリッスンしないため (前の段落を参照)、SSH トンネルを確立できず、接続が失敗し、クライアントはそれをネットワーク障害として解釈します。

mysql -v -h localhost -P 9989 -u user userdb -p3 -失敗する理由

の出力を投稿してください

...OR host LIKE 'localhost'[編集:トラブルシューティングの目的に関連する可能性があるため、以下に追加]

mysql > SELECT user, host FROM mysql.user WHERE user LIKE 'user' OR host LIKE 'localhost';

'user'(必要に応じて、句の後のLIKEを実際のユーザー名に置き換えます)

MySQL アクセス制御は、ユーザー名/パスワード ( user) と接続元( ) の両方をチェックして、ユーザーhostを識別します。ユーザーを作成していない可能性があります'user'@'localhost'

注意: 現時点では mysql.com にアクセスできないため、関連するマニュアル ページにリンクできません。

于 2012-06-16T08:55:32.143 に答える
1

Windowsでも同じ問題 ( "Lost connection...") がありました (Putty 経由で ssh トンネルを使用している場合)。ここで2つの問題があります:

  1. 間違ったポートが使用されました。正しく設定されているか再確認してください
  2. で有効にするのを忘れましたPutty: Connection > SSH > Tunnels > Local ports accept connections from other hosts
于 2016-11-28T11:05:23.583 に答える