MySQL:將多個位置上的相同數據庫合併到單個位置
我有一個系統資料庫,在幾個位置完全相同。它們每個都有一
REG
列,對於每個插入的行來說都是唯一的。基本上,每個數據輸入都有一個不同的REG
數字,它是自動遞增的。位置的表格引用了位置表,該表對於每個單獨的位置具有相同的結構。
但是,我們有一個中央數據庫,可以從多個位置提取所有數據。這個中央數據庫負責操作和填充所有位置的數據庫。
假設我有 3 個位置,A、B 和 C。所有這些位置都使用相同的數據庫結構來保存每個位置的數據。
我在這裡需要幫助的是,我必須如何更改或配置數據庫表或列,以便我可以將每個單獨的數據庫從不同的位置“恢復”到中央位置的單個數據庫中。如果結構相同,那麼當恢復/添加到中心位置的數據庫時,以前的數據將被新的數據替換。
我有一個名為的列
CODE
,它為每個位置儲存了特定的硬程式碼,它只是一個簡單的字元 A、B 或 C,具體取決於數據庫位置的保存位置。所以,在特定的時間,從3個不同的位置,表格表格將被備份並發送到中央數據庫。在那裡,它將被恢復或添加到數據庫中以填充這 3 個位置的所有內容。
有什麼想法和幫助嗎?提前致謝。
引擎是 InnoDB。
首先讓我建議一種可能不適合您的方法,但它似乎是節省頻寬和資源的理想方法:
多源複製是一項相對較新的功能,可在 MariaDB 10 和 MySQL 5.7(尚未發布)上使用。它恰好用於您正在談論的情況:將來自不同伺服器的數據合併為一個,通常用於分析目的。
這裡概述了它在MariaDB 10和MySQL 5.7中的工作方式。如果表具有相同的名稱,並且您設置了適當的過濾器,則可以使表幾乎實時更新,而不必每次都進行導入和導出(每次都會變得越來越低效) . 即使您不希望這樣,每次啟動和停止複制也會更容易,除非在同步之間完全重寫表。
由於寫入同一個表可能會變得不安全(對於數據完整性) - 取決於您在每個位置執行的 DML 查詢類型 - 您也可以寫入單獨的表並使用 VIEW 將其視為單個表。根據在中央位置執行的查詢,這可能會或可能不會更好地提高性能。
如果這對你不起作用(例如,因為你不能使用那些版本的 MySQL——畢竟這是一個相對較新的特性),我可以建議替代方法。
編輯:
由於您似乎無法使用穩定的網際網路連接(雖然這不是問題,複製是非同步的,即使它經常停止它也會起作用),我假設您想通過 USB 進行傳輸駕駛。
我的第二個建議是,如果數據不是太大,則使用 CSV 備份一個或多個表,如果數據相對較大,則使用二進制格式。
對於 CSV 格式,您可以使用mysqldump –tab或mydumper,然後使用mysqlimport /myloader 將它們導入回來。
如果 CSV 格式太慢,我建議您使用Percona XtraBackup 之類的東西,它與 InnoDB 結合使用,允許您以二進制格式導出表,然後單獨重新導入它們(它需要在導入節點上使用 Percona Server 或 MySQL 5.6 和
innodb_file_per_table
) . 您可以先單獨導入每個表,然後使用EXCHANGE PARTITION將其作為分區合併到單個表中。這將允許您以接近磁碟的速度進行導出/導入。
鑑於其他答案可能對您來說是個問題,我建議您嘗試pt-archiver而不是專門使用該
--columns
選項,當然結合--source
and--dest
選項您可能能夠以某種方式解決這個問題。祝你好運!