將資料庫 ( db1) 從一臺服務器移動到另一臺服務器,并且有一個表 ( big_table) 非常大,匯入到目標所需的時間比我們首選的維護視窗更長,因此我們在目標繼續時保持應用程式與源資料庫服務器通信匯入。
現在我們要重做這個程序,以分兩步來獲得改變的內容:
- 從源中轉儲除 外的所有表,
big_table并確保我們在匯入時不會覆寫或洗掉目標中已經存在的非常大的表 - 轉儲
big_table自上次時間戳以來的新/更新記錄,并將這些增量記錄匯入現有目的地db.big_table
對于第一步,在重新創建所有其他表的同時,這是否可以在目標中保留db1和db.big_table?
mysqldump -h host1 db1 --ignore-table=db1.big_table --no-create-db | mysql -h host2 db1
對于第二步,如果我知道big_table自已知時間戳以來沒有更新并且只有新記錄,這項作業會這樣做嗎?
mysqldump -h host1 db1 big_table --no-create-db --no-create-info --where "timestamp > '${LAST_EXPORTED_TIMESTAMP}'" | mysql -h host2 db1
我試圖了解自第一次匯入目標以來,這些“補丁”更改嘗試中的每一個是否都不會嘗試洗掉/創建,db1或者db1.big_table只是捕獲和匯入所有表,除了big_table并且只有big_table自已知時間戳以來的新記錄.
有沒有比我起草的更好的方法來做到這一點?
uj5u.com熱心網友回復:
mysqldump 沒有一張那么大的表(big_table);
你可以使用 meb 或 xtrabackup
uj5u.com熱心網友回復:
一個更好的方法是使用 MySQL 復制。
對源實體進行完整備份。您可以使用 mysqldump,但使用 Percona XtraBackup 之類的物理備份工具會更快。確保在備份時捕獲二進制日志坐標(這在 XtraBackup 中默認啟用)。
將備份恢復到新服務器。在此程序中,您的應用程式可能會繼續使用舊服務器。
將新服務器配置為舊服務器(其源)的副本。
開始復制并讓所有表的所有更改復制到新服務器,直到全部被趕上。這可能需要幾分鐘到幾小時,但需要多長時間并不重要,因為在同步時應用程式應該仍在使用舊服務器。
進行非常短暫的中斷以切換應用程式以使用新服務器。如果您的流量非常繁忙,在讓應用程式將其用于讀寫流量之前,您可能需要格外確保它已被完全趕上。但這很可能只需要幾秒鐘。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362927.html
標籤:mysql
上一篇:如何更改SQL格式
