2011-11-10 75 views
0

我們有一個內部MySQL數據庫,我們的客戶服務部門用來做報價,並在我們的網站上有一個外部MySQL數據庫,我們的客戶用它來做報價。我有一個我寫過的PHP報告,它提供了來自內部數據庫的信息。現在我想修改報告以包含來自外部數據庫的數據。我需要通過使用SSH連接來連接到外部數據庫。我一直在研究使用cURL或SSH2,但我不確定是否有正確的方法來做到這一點。有沒有人曾經在網絡服務器上查詢過SSH MySQL數據庫,或者有人知道我需要做什麼才能使其工作?謝謝你提供的所有幫助!通過SSH查詢遠程網絡服務器上的MySQL數據庫

+0

你能連接到遠程服務器的mysql端口嗎?如果是這樣,您可以像連接其他任何mysql服務器一樣連接到他們的服務器。 –

+0

這就是我想我需要在PHP中使用SSH2代碼。我之前沒有這樣做過,所以我不確定它是否會起作用。我想,在我花費太多時間計算出SSH2是否應該走的道路之前,我會先看看是否有人做過這樣的事情,並指出我的方向。我已經開始研究cURL,但從我所看到的,我認爲這不會做我需要的。到目前爲止,我想我必須嘗試使用​​SSH2連接到數據庫,然後查看連接後是否可以執行查詢。 – kheugel

+0

MySQL的連接協議確實允許SSL加密。除非你不想將MySQL端口暴露給世界,否則不需要使用SSH和/或隧道技術:http://dev.mysql.com/doc/refman/5.0/en/secure-using- ssl.html –

回答

1

我實際上使用名爲「Sequel Pro」的MySQL GUI客戶端,它提供了通過SSH連接連接到MySQL的選項。這是完全可行的,但如果您可以選擇無需連接到數據庫(例如,您可以從主機的「外部」連接到它),您應該更喜歡這一點。

我設想你可以通過SSH查詢你的數據庫的最簡單的方法是使用SSH端口轉發,所以你會產生一個進程ssh [email protected] -L3306:localhost:3306,然後你的MySQL連接器連接到本地主機。

SSH的-L參數指示它執行本地端口轉發,因此SSH將在本地端口上偵聽,並將其收到的內容直接從另一端轉發到指定的遠程主機/端口。顯然我的例子使用兩端的端口3306,但可以根據需要進行更改(RTM有更多關於此的)

+0

+1,打我吧 –

+0

所以我會在網絡服務器上產生這個過程,對嗎?我們的網站是託管的,而提供者在做這樣的事情時並不是最有幫助的。這是使其工作的唯一方法,還是有另一種方式?我應該說,我可以使用Navicat遠程登錄數據庫...我只是想從我的PHP代碼中找到一種方法。謝謝! – kheugel

+0

@kheugel是的,SSH將在服務器端。你如何通過Navicat做到?它會爲你做SSH調優嗎?如果你不能在你的PHP中產生'ssh'或者使用'OpenSSH' API,那麼你將會失敗,你將不得不採取其他方式獲取數據。 – Romain

0

是的,你可以通過SSH從bash查詢mysql,但這不是最好的和可擴展的方式。最好的解決方案是在生產服務器上創建一個REST Web服務。然後,您的內部系統將通過驗證來查詢該遠程服務。

+0

任何想法如何做到這一點? –

+0

也許有無數的這樣做,新舊方法,但是我做了一個快速的谷歌一些簡單的開始,我得到這個:http://robertobartolome.com/a-simple-web-service-using- php-json-and-mysql/https://github.com/memaker/webservice-php-json,代碼只是一個例子,讓你開始。 –

0

您設置從可用的端口號隧道內的本地服務器到mysql端口的遠程服務器上:

ssh -L 3307:localhost:3306 [email protected] 

,創建一個隧道的本地系統監聽3307端口,連接到端口3306(MySQL)在遠程服務器上。

然後指出你的PHP代碼連接到3307端口,而不是3306,它會在遠程服務器上隧道連接到mysql。

相關問題