2010-06-07 55 views
2

這是一個自由職業者的方法問題,在MySQL上有推論。有沒有一種方法可以從舊的專用服務器遷移到新的而不會丟失任何數據 - 而且沒有停機時間?在過去,我必須在新服務器啓動(即所有文件傳輸,系統啓動和準備就緒)以及舊服務器關閉(數據仍舊傳輸至舊的時間)之間丟失MySQL數據一個接管)。還有一個短暫的時間段,這兩個時間段都會因爲DNS等而更新。最好的方式來遷移服務器,而不會丟失任何數據,沒有停機時間(?)

有沒有一種方法讓MySQL/root輕鬆傳輸在特定時間段內更新/插入的所有數據?

+0

12-24小時內mySQL-wise會有多少活動? – 2010-06-07 10:59:12

回答

1

我會做一個抱歉的頁面,把它放在舊的服務器上,將所有數據傳輸到新的,然後切換DNS。雖然會有停機。

+0

有沒有辦法建立一個「全球抱歉頁」 - 許多不同的PHP /其他腳本在服務器上的多個域上的多個目錄中啓動了大量的mysql進程... – ina 2010-06-07 11:04:38

+0

我會做一個簡單的mod_rewrite規則來重定向所有請求對所有域 – 2010-06-07 11:12:33

0

當然。在源服務器上啓用bin日誌記錄。在啓動之後,進行數據庫轉儲並將其轉移到新服務器並導入。然後,當您準備好進行切換時,請更改DNS(讓您在工作時傳播更改),然後在兩臺服務器上關閉該站點。將binlogs複製到新服務器,並從轉儲日期/時間開始再次運行它們。

+0

感謝抱歉頁面是這樣的,我的MySQL數據庫是〜2GB到目前爲止,所以至少有半小時的停機時間之間傳輸數據庫。有沒有辦法選擇/轉儲所有db/table中已修改的條目? – ina 2010-06-11 11:05:26

1

我喜歡做的是關閉網站並開始使用以下命令將DB移動到其他服務器:2,然後將所有文件(php ..etc)移動到其他服務器(如果您有一些商店數據或更改文件每小時,如圖像上傳)。並在DNS更改爲全部到新服務器時將舊服務器指向新的數據庫服務器。

1

最長的停機時間來自DNS開關 - 可能需要幾個小時甚至幾天,直到所有客戶端緩存過期。

避免:

  1. 新服務器上設置應用程序來訪問數據庫的舊人,或者只是HTTP請求代理nginx的老宅,根據什麼是更容易接受。
  2. 然後去DNS開關,一些客​​戶端去ld服務器,一些到新的,在這裏你可以等待24小時以上,以確保所有請求去新的服務器
  3. 雖然DNS開關 - 排練mysql轉換。
    • 做一個'抱歉/保養頁',有很多指導如何做,通過重寫。無論如何你需要它
    • 衡量你有多快可以轉儲恢復分貝,如果時間是可以接受的 - 這是最簡單的,但記得給一些保證金
    • 如果前一個太慢 - 你可以嘗試binlog方法前面提出的方法回答
    • 最小的停機時間可以通過使新的服務器成爲一個mysql slave到舊的,在引擎蓋下它只是從主機即時下載binlog,您可以節省傳輸整個日誌的時間,最有可能的是在最小負載時,從設備將在主設備後面幾秒鐘,並且在應用程序被取下時會很快趕上,請參閱how to force slave to catch up
  4. 寫一個腳本,這爲你所做的所有過渡 - 使維護模式,鎖定主分貝,等待直到從迎頭趕上,使得從設備之間的主,替代應用程序配置新的數據庫,禁用維護,切換應用等。通過這種方式,你節省了輸入自己的命令的時間,在分段環境上測試以避免可能的錯誤(還記得設置較大的mysql超時,以防奴隸大量落後)
  5. 這裏通過運行腳本步驟

此外,如果您使用文件上傳到本地文件系統 - 這些文件需要同步,並且在大量文件上比使用db更加痛苦,因爲即使rsync掃描更改也需要很長時間。

相關問題