Mysql

MySQL:將多個位置上的相同數據庫合併到單個位置

  • December 26, 2021

我有一個系統資料庫,在幾個位置完全相同。它們每個都有一REG列,對於每個插入的行來說都是唯一的。基本上,每個數據輸入都有一個不同的REG數字,它是自動遞增的。

位置的表格引用了位置表,該表對於每個單獨的位置具有相同的結構。

但是,我們有一個中央數據庫,可以從多個位置提取所有數據。這個中央數據庫負責操作和填充所有位置的數據庫。

假設我有 3 個位置,A、B 和 C。所有這些位置都使用相同的數據庫結構來保存每個位置的數據。

我在這裡需要幫助的是,我必須如何更改或配置數據庫表或列,以便我可以將每個單獨的數據庫從不同的位置“恢復”到中央位置的單個數據庫中。如果結構相同,那麼當恢復/添加到中心位置的數據庫時,以前的數據將被新的數據替換。

我有一個名為的列CODE,它為每個位置儲存了特定的硬程式碼,它只是一個簡單的字元 A、B 或 C,具體取決於數據庫位置的保存位置。

所以,在特定的時間,從3個不同的位置,表格表格將被備份並發送到中央數據庫。在那裡,它將被恢復或添加到數據庫中以填充這 3 個位置的所有內容。

有什麼想法和幫助嗎?提前致謝。

這裡是我想要完成的數據庫佈局。 佈局

引擎是 InnoDB。

首先讓我建議一種可能不適合您的方法,但它似乎是節省頻寬和資源的理想方法:

多源複製是一項相對較新的功能,可在 MariaDB 10 和 MySQL 5.7(尚未發布)上使用。它恰好用於您正在談論的情況:將來自不同伺服器的數據合併為一個,通常用於分析目的。

這裡概述了它在MariaDB 10MySQL 5.7中的工作方式。如果表具有相同的名稱,並且您設置了適當的過濾器,則可以使表幾乎實時更新,而不必每次都進行導入和導出(每次都會變得越來越低效) . 即使您不希望這樣,每次啟動和停止複制也會更容易,除非在同步之間完全重寫表。

由於寫入同一個表可能會變得不安全(對於數據完整性) - 取決於您在每個位置執行的 DML 查詢類型 - 您也可以寫入單獨的表並使用 VIEW 將其視為單個表。根據在中央位置執行的查詢,這可能會或可能不會更好地提高性能。

如果這對你不起作用(例如,因為你不能使用那些版本的 MySQL——畢竟這是一個相對較新的特性),我可以建議替代方法。

編輯:

由於您似乎無法使用穩定的網際網路連接(雖然這不是問題,複製是非同步的,即使它經常停止它也會起作用),我假設您想通過 USB 進行傳輸駕駛。

我的第二個建議是,如果數據不是太大,則使用 CSV 備份一個或多個表,如果數據相對較大,則使用二進制格式。

對於 CSV 格式,您可以使用mysqldump –tabmydumper,然後使用mysqlimport /myloader 將它們導入回來。

如果 CSV 格式太慢,我建議您使用Percona XtraBackup 之類的東西,它與 InnoDB 結合使用,允許您以二進制格式導出表,然後單獨重新導入它們(它需要在導入節點上使用 Percona Server 或 MySQL 5.6 和innodb_file_per_table) . 您可以先單獨導入每個表,然後使用EXCHANGE PARTITION將其作為分區合併到單個表中。這將允許您以接近磁碟的速度進行導出/導入。

鑑於其他答案可能對您來說是個問題,我建議您嘗試pt-archiver而不是專門使用該--columns選項,當然結合--sourceand--dest選項您可能能夠以某種方式解決這個問題。祝你好運!

引用自:https://dba.stackexchange.com/questions/73853