sshトンネル(ポートフォワード)を使ってリモートのMySQLにつなぐ
自宅のMacからServersMan@VPSに入ってるMySQL直接接続したいが、危険だからMySQLのポートなんか外部に開放したくないと言う時に。
SSHのポートフォワードを使って、自宅MacからリモートMySQLにお気軽接続。
3307はクライアントのMac側に張る仮想のMySQLポート番号。基本的に任意。
3306はサーバ、ServersMan@VPS側のMySQLポート番号。
1.自宅Macから、ServersMan@VPSにsshトンネルを張る。
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を入れてなくても、サーバー側から自宅MacのMySQLに接続して、サーバー側からデータベースを切り離すってことも出来たりして。
テストデータの作成
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 ライブラリで実装されています。 >>>