2012-09-13 154 views
5

我有一個查詢。我在兩個不同的服務器上有兩個表。這兩個表具有相同的結構。一臺服務器上的主表每天都會更新,所以我想要一個cron作業或一個php腳本cron來更新另一臺服務器上的第二個從表。 我看過很多腳本,但沒有解決我的要求。mysql同步兩個數據庫中的兩個表

+0

更新以哪種方式?結構,數據,..應該如何更新,爲什麼很多腳本不能解決你的需求。你有什麼要求。 –

+0

其mysql..its不關於結構..其數據不斷增加..我想要一個php cron工作做到這一點..但我不知道如何去以最簡單和最優化的方式。我不想從主表中選擇數據並循環它們,直到它們插入從表中。這需要太多時間。 – user1587161

+0

所以我會很感激,如果IAM建議與一些優化的方式做它 – user1587161

回答

7

我不相信你沒有找到合適的腳本來做到這一點。根據服務器到服務器的帶寬和連接,以及表中的數據大小,您可以:

  • 直接傳輸整個表:

    mysqldump [options] sourcedatabase tablename \ 
        | mysql [options] --host remoteserver --user username ... 
    
  • 轉移表與MySQL壓縮

    # same as above, mysql has the "-C" flag 
    
  • 使用SSH加密和壓縮傳輸; MySQL是使用中間SQL文件和rsync僅傳送修改

    mysqldump [options] sourcedb tbl > dump.sql 
    rsync [-z] dump.sql [email protected]:/path/to/remote/dump.sql 
    ssh [email protected] "mysql [options] < /path/to/remote/dump.sql" 
    

上面都是簡單的表重寫遠程

mysqldump [options] sourcedatabase tablename \ 
    | ssh -C [email protected] 'mysql [options]' 
  • 轉移執行時,遠程數據丟失,由主置換複製。 mysqldump-plus-rsync-plus-ssh的運行時間大致與修改成正比,這意味着如果您有10-GB SQL轉儲並添加了十幾個INSERTS,則傳輸階段最多需要幾秒鐘才能同步兩個SQL文件。

    爲了優化插入階段,您可以選擇完整的MySQL複製,或者您需要一種方法來識別表上的操作,以便在同步時手動複製它們。這可能需要改變表格結構,例如添加「最後同步」和「需要刪除」列,甚至引入輔助表。

  • 1

    您可以使用一個簡單的解決方案 - Data Synchronization tooldbForge Studio for MySQL

    1. 創建數據比較項目,將比較和同步兩個不同的MySQL服務器上的兩個表。
    2. 使用創建的數據比較項目文檔(* .dcomp文件)以命令行模式運行應用程序。