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


MySQL 9.0 參考手冊  /  ...  /  使用 NDB Cluster 複製的 NDB Cluster 備份

25.7.9 使用 NDB Cluster 複製的 NDB Cluster 備份

本節討論如何使用 NDB Cluster 複製進行備份和從備份還原。我們假設複製伺服器已依照先前涵蓋的內容進行設定(請參閱第 25.7.5 節,「為複製準備 NDB Cluster」,以及緊接其後的章節)。完成此操作後,進行備份然後從備份還原的程序如下

  1. 有兩種不同的方法可以啟動備份。

    • 方法 A.  此方法需要先前在啟動複製程序之前,在來源伺服器上啟用叢集備份程序。這可以透過在 my.cnf file[mysql_cluster] 區段中包含下列這一行來完成,其中 management_host 是來源叢集的 NDB 管理伺服器的 IP 位址或主機名稱,而 port 是管理伺服器的埠號

      ndb-connectstring=management_host[:port]
      注意

      只有在未使用預設埠 (1186) 時,才需要指定埠號。如需有關 NDB Cluster 中的埠和埠配置的詳細資訊,請參閱第 25.3.3 節,「NDB Cluster 的初始設定」

      在此情況下,可以透過在複製來源上執行此陳述式來啟動備份

      shellS> ndb_mgm -e "START BACKUP"
    • 方法 B.  如果 my.cnf 檔案未指定在哪裡找到管理主機,您可以將此資訊傳遞至 NDB 管理用戶端,作為 START BACKUP 命令的一部分,來啟動備份程序。可以如這裡所示執行此操作,其中 management_hostport 是管理伺服器的主機名稱和埠號

      shellS> ndb_mgm management_host:port -e "START BACKUP"

      在我們先前概述的案例中(請參閱第 25.7.5 節,「為複製準備 NDB Cluster」),將會如下執行

      shellS> ndb_mgm rep-source:1186 -e "START BACKUP"
  2. 將叢集備份檔案複製到正在上線的複本。來源叢集執行 ndbd 程序的每個系統都有位於其上的叢集備份檔案,而且 所有 這些檔案都必須複製到複本,以確保成功還原。備份檔案可以複製到複本管理主機所在的電腦上的任何目錄中,只要 MySQL 和 NDB 二進位檔在該目錄中具有讀取權限即可。在此案例中,我們假設這些檔案已複製到目錄 /var/BACKUPS/BACKUP-1

    雖然複本叢集不一定需要與來源的資料節點數量相同,但強烈建議此數量相同。當複本伺服器啟動時,必須 防止複製程序啟動。您可以透過使用 --skip-replica-start 啟動複本來執行此操作。

  3. 在複本叢集上建立來源叢集上存在且要複製的任何資料庫。

    重要

    必須在複本叢集中的每個 SQL 節點上執行對應於要複製的每個資料庫的 CREATE DATABASE(或 CREATE SCHEMA)陳述式。

  4. mysql 用戶端中使用此陳述式來重設複本叢集

    mysqlR> RESET REPLICA;
  5. 您現在可以使用 ndb_restore 命令,依序針對每個備份檔案,在複本上啟動叢集還原程序。針對這些檔案的第一個檔案,必須包含 -m 選項以還原叢集元資料,如下所示

    shellR> ndb_restore -c replica_host:port -n node-id \
            -b backup-id -m -r dir

    dir 是備份檔案放置在複本上的目錄路徑。針對對應於其餘備份檔案的 ndb_restore 命令,應使用 -m 選項。

    若要從具有四個資料節點的來源叢集還原(如第 25.7 節,「NDB Cluster 複製」中的圖例所示),其中備份檔案已複製到目錄 /var/BACKUPS/BACKUP-1,則在複本上執行的正確命令順序可能如下所示

    shellR> ndb_restore -c replica-host:1186 -n 2 -b 1 -m \
            -r ./var/BACKUPS/BACKUP-1
    shellR> ndb_restore -c replica-host:1186 -n 3 -b 1 \
            -r ./var/BACKUPS/BACKUP-1
    shellR> ndb_restore -c replica-host:1186 -n 4 -b 1 \
            -r ./var/BACKUPS/BACKUP-1
    shellR> ndb_restore -c replica-host:1186 -n 5 -b 1 -e \
            -r ./var/BACKUPS/BACKUP-1
    重要

    本範例中最後一次呼叫 ndb_restore 時的 -e(或 --restore-epoch)選項是必要的,以確保 epoch 會寫入複本的 mysql.ndb_apply_status 表格中。若沒有此資訊,複本便無法與來源正確同步。(請參閱第 25.5.23 節,「ndb_restore — 還原 NDB Cluster 備份」。)

  6. 現在,您需要從複本上的 ndb_apply_status 表格取得最近的 epoch(如第 25.7.8 節,「使用 NDB Cluster 複製實作容錯移轉」中所述)

    mysqlR> SELECT @latest:=MAX(epoch)
            FROM mysql.ndb_apply_status;
  7. 使用在上一個步驟中取得的 epoch 值 @latest,您可以從來源上的 mysql.ndb_binlog_index 表格中,取得正確的啟動位置 @pos(位於正確的二進位日誌檔案 @file 中)。此處顯示的查詢會從邏輯還原位置之前套用的最後一個 epoch 中的 PositionFile 欄位取得這些資料

    mysqlS> SELECT
         ->     @file:=SUBSTRING_INDEX(File, '/', -1),
         ->     @pos:=Position
         -> FROM mysql.ndb_binlog_index
         -> WHERE epoch > @latest
         -> ORDER BY epoch ASC LIMIT 1;

    如果目前沒有任何複製流量,您也可以透過在來源上執行 SHOW BINARY LOG STATUS,並使用輸出中 Position 欄位中顯示的值,來取得類似的資訊,此值的檔案名稱的字尾具有 File 欄位中顯示的所有檔案中的最大值。在此情況下,您必須判斷此檔案為何,並在下一個步驟中手動提供名稱或透過使用指令碼剖析輸出來提供。

  8. 使用在上一個步驟中取得的值,您現在可以在複本的 mysql 用戶端中發出適當的指令。使用下列 CHANGE REPLICATION SOURCE TO 陳述式

    mysqlR> CHANGE REPLICATION SOURCE TO
         ->     SOURCE_LOG_FILE='@file',
         ->     SOURCE_LOG_POS=@pos;
  9. 現在複本已知道要從來源二進位日誌檔案的哪個位置開始讀取資料,您可以讓複本使用此陳述式開始複製

    mysqlR> START REPLICA;

若要在第二個複製通道上執行備份和還原,只需要重複這些步驟,並將輔助來源和複本的主機名稱和 ID 取代為主要來源和複本伺服器的主機名稱和 ID(若適當),並在其上執行上述陳述式即可。

如需有關執行叢集備份和從備份還原叢集的其他資訊,請參閱第 25.6.8 節,「NDB Cluster 的線上備份」