如果來源資料庫包含現有資料,則必須將此資料複製到每個副本。有多種方法可以從來源資料庫傾印資料。以下章節說明可能的選項。
若要選擇適當的資料庫傾印方法,請在這些選項之間選擇
如果您的資料庫儲存在二進制可攜式檔案中,您可以將原始資料檔案複製到副本。這可能比使用 mysqldump 並在每個副本上匯入檔案更有效率,因為它跳過了重新執行
INSERT
陳述式時更新索引的額外負擔。對於諸如InnoDB
之類的儲存引擎,不建議使用此方法。使用 MySQL 伺服器的複製外掛程式將所有資料從現有副本傳輸到複製。如需使用此方法的指示,請參閱 第 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 伺服器的慢速關機,然後手動複製資料檔案。
若要在您的 MySQL 資料檔案存在於單一檔案系統上時,建立 MyISAM
資料表的原始資料快照,您可以使用標準的檔案複製工具,例如 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;
建立資料庫的封存或複本後,請在開始複寫程序之前,將檔案複製到每個複本。