在某些情況下,您可能會有單一來源伺服器,並想要將不同的資料庫複製到不同的副本。例如,您可能想要將不同的銷售資料分配到不同的部門,以協助在資料分析期間分散負載。此配置的範例如 圖 19.2 「將資料庫複製到個別副本」所示。
您可以透過正常設定來源和副本,然後使用每個副本上的 --replicate-wild-do-table
設定選項,限制每個副本處理的二進位日誌陳述式,來達成此分隔。
當使用基於陳述式的複製時,您不應該將 --replicate-do-db
用於此目的,因為基於陳述式的複製會導致此選項的效果根據目前選取的資料庫而有所不同。這也適用於混合格式複製,因為這會啟用使用基於陳述式格式複製某些更新。
但是,如果您僅使用基於列的複製,則將 --replicate-do-db
用於此目的應該是安全的,因為在此情況下,目前選取的資料庫對選項的操作沒有影響。
例如,為了支援如 圖 19.2 「將資料庫複製到個別副本」所示的分隔,您應該在執行 START REPLICA
之前,按如下方式設定每個副本:
副本 1 應該使用
--replicate-wild-do-table=databaseA.%
。副本 2 應該使用
--replicate-wild-do-table=databaseB.%
。副本 3 應該使用
--replicate-wild-do-table=databaseC.%
。
此設定中的每個副本都會接收來自來源的整個二進位日誌,但只會執行二進位日誌中適用於該副本中生效的 --replicate-wild-do-table
選項所包含的資料庫和表格的事件。
如果您的資料必須在複製開始之前同步到副本,您有許多選擇:
將所有資料同步到每個副本,然後刪除您不想保留的資料庫、表格或兩者。
使用 mysqldump 為每個資料庫建立獨立的轉儲檔案,並在每個複本上載入適當的轉儲檔案。
使用原始資料檔案轉儲,並且僅包含每個複本所需的特定檔案和資料庫。
注意除非您使用
innodb_file_per_table
,否則這不適用於InnoDB
資料庫。