MySQL作為數(shù)據(jù)庫,簡直就是易用的代名詞,絕大多數(shù)數(shù)據(jù)庫驅(qū)動的web應(yīng)用程序都選擇它做為自己的數(shù)據(jù)庫。正因如此,MySQL被應(yīng)用于很多WEB服務(wù)器上。
雖然說MySQL的命令行工具確實有用,但要它完成任務(wù)有時實在是在跟時間過不去,除非你對SQL語法已經(jīng)通吃,熟到爐火純青的地步。正是由于這個原因,像phpMyAdmin之類的工具已經(jīng)變得如此流行。
MySQL開發(fā)者們已經(jīng)開始使用他們自己的GUI工具,它們能夠用來和本地或遠(yuǎn)程的MYSQL數(shù)據(jù)庫進(jìn)行連接。這些工具包括MySQL Administrator、MySQL Query Browser、以及MySQL Workbench。它們都是不錯的圖形界面的工具,簡化了對MySQL數(shù)據(jù)庫的創(chuàng)建和操作。
使用這些工具操作遠(yuǎn)程數(shù)據(jù)庫的問題是,它們通常要求你使MySQL對WEB接口進(jìn)行監(jiān)聽;而大多數(shù)MySQL管理員只會選擇對本地主機或某個套接字開啟MySQL監(jiān)聽,而不會允許遠(yuǎn)程連接。這是很好的安全習(xí)慣;可是,它讓你不花出一點點努力就別想舒舒服服地遠(yuǎn)程使用這些GUI工具。這里使用ssh隧道[2](tunnel)進(jìn)行連接效果極好。它不僅允許高強度驗證和加密,而且對于MySQL只監(jiān)聽本地連接的設(shè)定也毫不妥協(xié)。
首先,必須要保證MySQL監(jiān)聽本地主機[2](默認(rèn)情況下它只監(jiān)聽本地套接字上的連接),這可以通過告訴MySQL允許WEB連接并重新啟動服務(wù)器來實現(xiàn)。MySQL應(yīng)該配置成只監(jiān)聽loopback接口,或者本地接口,或者WEB接口。
接下來,編輯你希望用來發(fā)起連接的主機上的~/.ssh/config文件,并插入如下內(nèi)容:
Host remotesql ?Hostname webserver.domain.com ?User joe ?LocalForward *:13306 localhost:3306 |
這會以用戶joe連接webserver.domain.com,并且把本地系統(tǒng)上的13306端口轉(zhuǎn)發(fā)(forward)到webserver.domain.com的3306端口(這是標(biāo)準(zhǔn)MySQL端口)。注意我們沒有把被轉(zhuǎn)發(fā)端口和本地機器上的本地接口進(jìn)行綁定,而是指向了所有接口;這就是說我們可以連上me.domain.com的13306端口(假設(shè)me.domain.com是本地工作站的名字),而不是去連接本地主機上的13306端口(這很重要,因為這些GUI工具會試圖使用一個套接字來連接本地主機,而這不是我們希望的。)現(xiàn)在你可以發(fā)起連接,方法是執(zhí)行:
$ ssh -f -N remotesql |
最后,激活MySQL的管理員賬戶,并且通過你的信任證書,讓它連接me.domain.com的13306端口(而不管它是用戶賬戶還是根賬戶)。為了正常連接,你可能不得不給user@localhost.localdomain許可。
這樣做之后,你將能夠使用本地WEB上的任何一個系統(tǒng),跨越Internet而又毫無風(fēng)險的連接遠(yuǎn)程數(shù)據(jù)庫(除非本地機器上防火墻規(guī)則阻止了它),這樣之后,你仍然可以使用本地的MySQL命令行工具操作遠(yuǎn)程數(shù)據(jù)庫:
$ mysql -u root -p -h me.domain.com -P 13306 |