気づいたら年が明けていますが俺は元気です。
タイトル通りなんだけど、あるMySQLサーバへつなぐためには踏み台を通らないといけなくて、いちいち
[sourcecode language="bash” padlinenumbers="2”] localhost$ ssh -t gateway ssh dbserver dbserver$ mysql -uhoge -p
とかやらないといけなくて、めんどい。というかこれだとローカルの開発環境で、一時的にdbserverで動作してるMySQLのデータを使いたいときとか困る。ダンプしてローカルに持ってくればいいけど、データがものすごいデカかったりしてだるい。どうにかしたい。
というわけで、Port Forwardすればいいじゃないかと思って
[sourcecode language="bash" padlinenumbers="2"]
$ ssh -Nf -L 13306:dbserver:3306 gateway
とかして、
[sourcecode language="text” padlinenumbers="2”] $ mysql -uhoge -p -P13306
これで勝つる!!!と思ったら、これでは繋がらない。でもtelnet localhost 13306とか叩いてみると繋がるように見える。
[sourcecode language="text" padlinenumbers="2"]
$ telnet localhost 13306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
L
5.5.8-log
$;2)s.%n!
?QV;dgXbeUZBymysql_native_password
なにこれどういうことなの、と思って色々試したり調べたりしていたら、答えは意外なところに。
What is SSH Port Forwarding and How It Worksってページに書いてあった。
Never use “localhost” for hostname、だと……??
[sourcecode language="text” padlinenumbers="2”] $ mysql -uhoge -p -P13306 -h127.0.0.1 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1058649 Server version: 5.5.8-log MySQL Community Server (GPL)
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
をををを……そして<a href="http://d.hatena.ne.jp/yamamucho/20110319/1300511690">SSH ポートフォワードで MySQL サーバにログインするときのメモ - 酔いどれコード</a> に同じことが書いてあった。damn。localhost指定(-hオプションなしのデフォルト)だと、Unixドメインソケットを使って通信するので、当然ネットワーク越しには繋がらないよというオチでした。2時間くらいハマってしまったのでメモ。