sshトンネル(ポートフォワード)を使ってリモートのMySQLにつなぐ

自宅のMacからServersMan@VPSに入ってるMySQL直接接続したいが、危険だからMySQLのポートなんか外部に開放したくないと言う時に。

SSHのポートフォワードを使って、自宅MacからリモートMySQLにお気軽接続。


3307はクライアントのMac側に張る仮想のMySQLポート番号。基本的に任意。
3306はサーバ、ServersMan@VPS側のMySQLポート番号。

1.自宅Macから、ServersMan@VPSsshトンネルを張る。

ssh -fNL 3307:localhost:3306 admin@ServersManのアドレス -p ServersMan側のssh接続ポート番号

2.つなぎ方。

mysql -u root -p -h 127.0.0.1 -P 3307

3.自宅のMacからPythonでリモートのMySQLに接続してみる

これが便利なのって、自宅Macから、サーバー側のMySQLデータを直接メンテしたりなど出来るってことかな。

サーバーから自宅Macに、sshトンネルを逆に掘れば、サーバー側にMySQLを入れてなくても、サーバー側から自宅MacMySQLに接続して、サーバー側からデータベースを切り離すってことも出来たりして。

テストデータの作成

mysql -u root -p -h 127.0.0.1 -P 3307

以下は、MySQLコンソールから

use test;

CREATE TABLE mef (c TEXT);

INSERT INTO mef VALUES("今日の天気は晴れです。");
INSERT INTO mef VALUES("Unicode 正規化の機能は、プラグインとリンクしている ICU ライブラリで実装されています。");

select * from mef;
+----------------------------------------------------------------------------------------+
| c                                                                                      |
+----------------------------------------------------------------------------------------+
| 今日の天気は晴れです。                                                                 |
| Unicode 正規化の機能は、プラグインとリンクしている ICU ライブラリで実装されています。  |
+----------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

自宅のMacからPythonでリモートのMySQLに接続してみる

python

以下はpythonコンソールから

>>> import MySQLdb
>>> conn = MySQLdb.connect(db='test', host='127.0.0.1', user='root', passwd='パスワード' port=3307)
>>> cursor = conn.cursor()
>>> cursor.execute( "SELECT * FROM mef ;" )
2L
>>> rows = cursor.fetchall()
>>> print rows[0][0]
今日の天気は晴れです。
>>> print rows[1][0]
Unicode 正規化の機能は、プラグインとリンクしている ICU ライブラリで実装されています。
>>>