如果來源資料庫包含現有資料,則必須將此資料複製到每個副本。有多種方法可以從來源資料庫傾印資料。以下各節說明可能的選項。
若要選擇適當的資料庫傾印方法,請在這些選項之間選擇
如果您的資料庫儲存在二進制可攜式檔案中,您可以將原始資料檔案複製到副本。這可能比使用 mysqldump 并在每個副本上匯入檔案更有效率,因為它可以跳過在重播
INSERT
陳述式時更新索引的額外負荷。對於InnoDB
等儲存引擎,不建議這樣做。使用 MySQL 伺服器的 clone 外掛程式將所有資料從現有的副本傳輸到複製品。如需使用此方法的指示,請參閱 第 7.6.7.7 節,〈用於複製的複製〉。
若要部署多個 MySQL 執行個體,您可以使用 InnoDB Cluster,讓您可以在 MySQL Shell 中輕鬆管理一組 MySQL 伺服器執行個體。InnoDB Cluster 將 MySQL Group Replication 包裝在程式化環境中,讓您可以輕鬆部署 MySQL 執行個體叢集以實現高可用性。此外,InnoDB Cluster 與 MySQL Router 無縫介面,讓您的應用程式可以連線到叢集,而無需編寫自己的故障轉移程序。但是,對於不需要高可用性的類似使用案例,您可以使用 InnoDB ReplicaSet。可以在此處找到 MySQL Shell 的安裝指示。
若要建立現有來源資料庫中資料的快照,請使用 mysqldump 工具。資料傾印完成後,在啟動複製程序之前,將此資料匯入到副本中。
以下範例會將所有資料庫傾印至名為 dbdump.db
的檔案,並包含 --source-data
選項,此選項會自動附加複本上啟動複寫程序所需的 CHANGE REPLICATION SOURCE TO
陳述式。
$> mysqldump --all-databases --source-data > dbdump.db
如果您不使用 --source-data
,則必須在另一個工作階段中手動鎖定所有表格。請參閱第 19.1.2.4 節〈取得複寫來源二進位日誌座標〉。
可以使用 mysqldump 工具從傾印中排除特定資料庫。如果您想要選擇要包含在傾印中的資料庫,請不要使用 --all-databases
。請選擇下列其中一個選項
使用
--ignore-table
選項排除資料庫中的所有表格。使用
--databases
選項,只命名您想要傾印的那些資料庫。
根據預設,如果來源上正在使用 GTID (gtid_mode=ON
),mysqldump 會在傾印輸出中包含來源上 gtid_executed
集中取得的 GTID,以將它們新增至複本上的 gtid_purged
集中。如果您只傾印特定資料庫或表格,請務必注意,mysqldump 所包含的值包含來源上 gtid_executed
集中所有交易的 GTID,即使是那些變更資料庫中遭抑制的部分,或伺服器上未包含在部分傾印中的其他資料庫的交易也是如此。請檢查 mysqldump 的 --set-gtid-purged
選項的說明,以找出您正在使用的 MySQL 伺服器版本的預設行為結果,以及如果此結果不適合您的情況,要如何變更行為。
如需詳細資訊,請參閱第 6.5.4 節〈mysqldump — 資料庫備份程式〉。
若要匯入資料,請將傾印檔案複製到複本,或從遠端連線至複本時從來源存取檔案。
本節說明如何使用構成資料庫的原始檔案建立資料快照。對使用具有複雜快取或記錄演算法的儲存引擎的表格採用此方法,需要額外步驟才能產生完美的「時間點」快照:即使您已取得全域讀取鎖定,初始複製命令也可能遺漏快取資訊和記錄更新。儲存引擎對此的反應取決於其損毀復原能力。
如果您使用 InnoDB
表格,則可以使用 MySQL Enterprise Backup 元件中的 mysqlbackup 命令來產生一致的快照。此命令會記錄與複本上要使用的快照對應的日誌名稱和偏移量。MySQL Enterprise Backup 是包含在 MySQL Enterprise 訂閱中的商業產品。如需詳細資訊,請參閱第 32.1 節〈MySQL Enterprise Backup 概觀〉。
如果來源和複本的 ft_stopword_file
、ft_min_word_len
或 ft_max_word_len
值不同,而且您正在複製具有全文索引的表格,此方法也無法可靠運作。
假設上述例外狀況不適用於您的資料庫,請使用冷備份技術,以取得 InnoDB
表格的可靠二進位快照:執行 MySQL 伺服器的慢速關機,然後手動複製資料檔案。
若要建立 MyISAM
表格的原始資料快照,當您的 MySQL 資料檔案存在於單一檔案系統上時,您可以使用標準檔案複製工具,例如 cp 或 copy、遠端複製工具,例如 scp 或 rsync、封存工具,例如 zip 或 tar,或檔案系統快照工具,例如 dump。如果您只複寫特定資料庫,則只複製與那些表格相關的檔案。對於 InnoDB
,除非您已啟用 innodb_file_per_table
選項,否則所有資料庫中的所有表格都會儲存在系統表格空間檔案中。
下列檔案不是複寫所需的
與
mysql
資料庫相關的檔案。複本的連線中繼資料存放庫檔案
master.info
(如果使用);現在已不建議使用此檔案 (請參閱第 19.2.4 節〈中繼日誌和複寫中繼資料存放庫〉)。來源的二進位日誌檔案,如果您要使用二進位日誌索引檔案來尋找複本的來源二進位日誌座標,則二進位日誌索引檔案除外。
任何中繼日誌檔案。
根據您是否正在使用 InnoDB
表格,請選擇下列其中一種
如果您正在使用 InnoDB
表格,且也為了使用原始資料快照取得最一致的結果,請在程序期間關閉來源伺服器,如下所示
取得讀取鎖定並取得來源的狀態。請參閱第 19.1.2.4 節〈取得複寫來源二進位日誌座標〉。
在另一個工作階段中,關閉來源伺服器
$> mysqladmin shutdown
建立 MySQL 資料檔案的複本。下列範例顯示執行此作業的常見方式。您只需要選擇其中一個
$> tar cf /tmp/db.tar ./data $> zip -r /tmp/db.zip ./data $> rsync --recursive ./data /tmp/dbdata
重新啟動來源伺服器。
如果您未使用 InnoDB
表格,您可以從來源取得系統快照,而無需依照下列步驟所述關閉伺服器
取得讀取鎖定並取得來源的狀態。請參閱第 19.1.2.4 節〈取得複寫來源二進位日誌座標〉。
建立 MySQL 資料檔案的複本。下列範例顯示執行此作業的常見方式。您只需要選擇其中一個
$> tar cf /tmp/db.tar ./data $> zip -r /tmp/db.zip ./data $> rsync --recursive ./data /tmp/dbdata
在您取得讀取鎖定的用戶端中,釋放鎖定
mysql> UNLOCK TABLES;
一旦您建立資料庫的封存或複本,請在啟動複寫程序之前,將檔案複製到每個複本。