文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  選擇資料快照的方法

19.1.2.5 選擇資料快照的方法

如果來源資料庫包含現有資料,則必須將此資料複製到每個副本。有多種方法可以從來源資料庫傾印資料。以下章節說明可能的選項。

若要選擇適當的資料庫傾印方法,請在這些選項之間選擇

  • 使用 mysqldump 工具建立您要複製的所有資料庫的傾印。這是建議的方法,尤其是在使用 InnoDB 時。

  • 如果您的資料庫儲存在二進制可攜式檔案中,您可以將原始資料檔案複製到副本。這可能比使用 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 的安裝說明可於此處找到。

19.1.2.5.1 使用 mysqldump 建立資料快照

若要建立現有來源資料庫中的資料快照,請使用 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 — 資料庫備份程式」

若要匯入資料,請將傾印檔案複製到複本,或是在從遠端連線至複本時,從來源存取該檔案。

19.1.2.5.2 使用原始資料檔案建立資料快照

本節說明如何使用組成資料庫的原始檔案建立資料快照。對使用具有複雜快取或記錄演算法的儲存引擎的資料表採用此方法,需要額外的步驟才能產生完美的時間點快照:即使您已取得全域讀取鎖定,初始複製命令也可能會遺漏快取資訊和記錄更新。儲存引擎如何回應此情況取決於其當機復原能力。

如果您使用 InnoDB 資料表,您可以使用 MySQL Enterprise Backup 元件中的 mysqlbackup 命令來產生一致的快照。此命令會記錄與複本上要使用的快照相對應的日誌名稱和偏移。MySQL Enterprise Backup 是一種商業產品,包含在 MySQL Enterprise 訂閱中。如需詳細資訊,請參閱 第 32.1 節:「MySQL Enterprise Backup 概觀」

如果來源和複本的 ft_stopword_fileft_min_word_lenft_max_word_len 值不同,且您正在複製具有全文索引的資料表,則此方法也無法可靠地運作。

假設上述例外情況不適用於您的資料庫,請使用 冷備份技術來取得 InnoDB 資料表的可靠二進位快照:執行 MySQL 伺服器的慢速關機,然後手動複製資料檔案。

若要在您的 MySQL 資料檔案存在於單一檔案系統上時,建立 MyISAM 資料表的原始資料快照,您可以使用標準的檔案複製工具,例如 cpcopy、遠端複製工具,例如 scprsync、封存工具,例如 ziptar 或檔案系統快照工具,例如 dump。如果您僅複寫某些資料庫,則僅複製與這些資料表相關的檔案。對於 InnoDB,除非您啟用 innodb_file_per_table 選項,否則所有資料庫中的所有資料表都會儲存在系統表空間檔案中。

下列檔案不是複寫的必要項目

  • mysql 資料庫相關的檔案。

  • 複本的連線中繼資料存放檔案 master.info(如果使用);此檔案的使用現在已過時(請參閱 第 19.2.4 節:「中繼日誌和複寫中繼資料存放庫」)。

  • 來源的二進位日誌檔案,如果您要使用它來尋找複本的來源二進位日誌座標,則二進位日誌索引檔案除外。

  • 任何中繼日誌檔案。

根據您是否正在使用 InnoDB 資料表,選擇下列其中一個

如果您正在使用 InnoDB 資料表,並且要使用原始資料快照獲得最一致的結果,請在處理期間關閉來源伺服器,如下所示

  1. 取得讀取鎖定並取得來源的狀態。請參閱 第 19.1.2.4 節:「取得複寫來源二進位日誌座標」

  2. 在個別工作階段中,關閉來源伺服器

    $> mysqladmin shutdown
  3. 複製 MySQL 資料檔案。下列範例顯示常見的執行方式。您只需要選擇其中一種

    $> tar cf /tmp/db.tar ./data
    $> zip -r /tmp/db.zip ./data
    $> rsync --recursive ./data /tmp/dbdata
  4. 重新啟動來源伺服器。

如果您未使用 InnoDB 資料表,您可以從來源取得系統快照,而無需關閉伺服器,如下列步驟所述

  1. 取得讀取鎖定並取得來源的狀態。請參閱 第 19.1.2.4 節:「取得複寫來源二進位日誌座標」

  2. 複製 MySQL 資料檔案。下列範例顯示常見的執行方式。您只需要選擇其中一種

    $> tar cf /tmp/db.tar ./data
    $> zip -r /tmp/db.zip ./data
    $> rsync --recursive ./data /tmp/dbdata
  3. 在您取得讀取鎖定的用戶端中,釋放鎖定

    mysql> UNLOCK TABLES;

建立資料庫的封存或複本後,請在開始複寫程序之前,將檔案複製到每個複本。