2012-04-02 41 views
0

我目前在一個單獨的VPS上運行一個Rails應用程序和它自己的MySQL數據庫。該數據庫還包含用戶表。我們目前正在構建第二個應該有相同用戶的應用程序。如果有人註冊,他有兩個帳戶。一個用戶數據庫,兩個應用程序在不同的服務器上

然而,問題是,這第二個(PHP)應用程序必須在其他位置託管。這裏有什麼最佳實踐?我可以直接連接到外部數據庫而不會造成大的延遲嗎?我應該同步他們嗎?首先創建一個API?

我在尋找可能的最易維護的方法。謝謝。

回答

1

可以允許第二主機訪問的第一個MySQL服務器。最佳實踐(據我所知)這樣做是創建一個新的用戶帳戶,給它所需的特權用戶表,只有允許的IP地址或域名訪問它第二臺主機並使用安全密碼。你會運行MySQL服務器上的這個查詢:

GRANT ALL ON mydatabase.users TO 'mynewuser'@'123.123.123.123' 
    IDENTIFIED BY 'mysecurepassword'; 

不用說你將取代「mydatabase.users」與你想擁有訪問權限的用戶的用戶名數據庫和表名,「mynewuser」(你可以在這裏放置任何東西,用戶將被自動創建),'123.123.123.123'與你的第二臺服務器的IP或域名和'mysecurepassword'一起使用一個好的長密碼,最好是隨機生成的。

您的第二臺服務器現在可以連接到MySQL服務器,並具有ALL特權(您可以將其更改爲它所需的權限)放在mydatabase.users表上。

MySQL 5.6 GRANT Syntax
Greensql.com on MySQL remote access best practices

爲了儘量減少小的性能損失我會從創建多個MySQL連接切莫(嘗試使用盡可能少,最好只有一個)。我不是100%以下,但我很確定減少您執行的單獨查詢的數量也是一個好主意。而不是運行10個單獨的插入,運行一個插入與多個VALUES段,例如,

INSERT INTO mytable(id, name) VALUES 
    (0, 'mia'), 
    (1,'tom'), 
    (2,'carl'); 

我敢肯定MySQL Prepared Statements也將是相當大的幫助降低速度損失

1

您可以從第二個應用程序連接到數據庫。 但連接的延遲將始終存在。 另一件事是你必須考慮安全性,因爲數據庫將被全世界訪問。您可以將連接限制在第二個Web服務器上。 爲了減少延遲,您可以選擇使用memcached或其他緩存,這樣您就不必一次又一次地訪問數據庫。 您可以擁有一個mysql複製並將主數據庫作爲主數據庫,並在第二個應用程序服務器中設置另一個mysql並將其作爲從服務器。 第二臺服務器的mysql與主服務器同步,所有的寫入查詢(更新,插入,刪除等)都應該發送給主服務器。這應該減少數據庫負載。

相關問題