やりたいこと
本番環境やステージング環境では、DMZ内にDBを設置するのが常套かと思います。このDBにローカルから直接接続して、手慣れたmysqlクライアントでデータ参照/操作したい場合のお話です。
前提環境
- 対象のDBに接続可能なappサーバにssh接続可能なこと
- DBはmysql(この投稿上では)
使えるmysqlクライアント
以下の手順説明ではクライアント側はmysqlコマンドを使いますが、基本的にどんなクライアントでも問題無いはずです。手元では Navicast Essentials for MySqlやrails consoleで接続して便利に使ってます。
手順
- sshトンネリング接続を確立する
$ ssh -o TCPKeepAlive=yes user@app.server -NfL 13306:10.0.0.123:3306
# 13306 : local側の空きポート番号
# 10.0.0.123 : appサーバから見たdbサーバアドレス
# 3306: dbサーバのmysql接続用ポート
- mysqlに接続する@ローカル
$ mysql -h 127.0.0.1 -P 13306 -p
# "localhost"ではなく127.0.0.1
# sshトンネリングで設定したポート番号に接続
問題点
-
サーバ側の設定次第ですが、何も操作しない時間がある程度経過すると、ssh接続を切断されてしまうので、その都度つなぎ直す必要が有ります。
-> tsuyoshi_choさんにKeepAlive+ServerAliveIntervalを教えてもらって解消しました。ありがとうございます! - 危ない技なので取り扱い要注意!