在開始備份之前,請確保叢集已正確設定以執行備份。(請參閱章節 25.6.8.3, “NDB Cluster 備份的設定”。)
START BACKUP
命令用於建立備份,其語法如下所示
START BACKUP [backup_id]
[encryption_option]
[wait_option]
[snapshot_option]
encryption_option:
ENCRYPT [PASSWORD=password]
password:
{'password_string' | "password_string"}
wait_option:
WAIT {STARTED | COMPLETED} | NOWAIT
snapshot_option:
SNAPSHOTSTART | SNAPSHOTEND
連續備份會自動依序識別,因此 backup_id
(大於或等於 1 的整數)為選用;如果省略,則會使用下一個可用值。如果使用現有的 backup_id
值,備份會失敗,並出現錯誤 備份失敗:檔案已存在。如果使用,backup_id
必須緊接在 START BACKUP
關鍵字之後,才能使用其他選項。
START BACKUP
支援使用 ENCRYPT PASSWORD=
建立加密備份。password
password
必須滿足以下所有要求
使用任何可列印的 ASCII 字元,但
!
、'
、"
、$
、%
、\
和^
除外長度不得超過 256 個字元
以單引號或雙引號括住
當使用 ENCRYPT PASSWORD='
時,每個資料節點寫入的備份資料記錄和日誌檔案會使用從使用者提供的 password
'password
和隨機產生的 salt 衍生的金鑰進行加密,並使用金鑰衍生函式 (KDF),該函式使用 PBKDF2-SHA256 演算法為該檔案產生對稱加密金鑰。此函式的形式如下所示
key = KDF(random_salt, password)
然後使用產生的金鑰,使用 AES 256 CBC inline 加密備份資料,並使用對稱加密來加密備份檔案集(使用產生的金鑰)。
NDB Cluster 絕不儲存使用者提供的密碼或產生的加密金鑰。
可以從 encryption_option
中省略 PASSWORD
選項。在這種情況下,管理用戶端會提示使用者輸入密碼。
可以使用 PASSWORD
設定空密碼 (''
或 ""
),但不建議這麼做。
可以使用以下任何命令來解密加密的備份
ndbxfrm
--decrypt-password=
password
input_file
output_file
ndb_print_backup_file
-P
password
file_name
ndbxfrm
--decrypt-password-from-stdin
input_file
output_file
ndb_print_backup_file
--backup-password-from-stdin
file_name
ndb_mgm
--backup-password-from-stdin
--execute "START BACKUP ..."
如需更多資訊,例如可能需要的其他選項,請參閱這些程式的說明。
可以使用 wait_option
來判斷在發出 START BACKUP
命令後,控制權何時返回給管理用戶端,如下列表所示
WAIT COMPLETED
為預設值。
可以使用 snapshot_option
來判斷備份是否符合發出 START BACKUP
時的叢集狀態,或完成時的狀態。SNAPSHOTSTART
會讓備份符合備份開始時的叢集狀態;SNAPSHOTEND
會讓備份反映備份完成時的叢集狀態。SNAPSHOTEND
為預設值,且符合先前 NDB Cluster 版本中的行為。
如果您將 SNAPSHOTSTART
選項與 START BACKUP
一起使用,且啟用 CompressedBackup
參數,則只會壓縮資料和控制檔案,不會壓縮日誌檔案。
如果同時使用 wait_option
和 snapshot_option
,則可以按任何順序指定它們。例如,假設沒有現有的備份 ID 為 4,則以下所有命令均有效
START BACKUP WAIT STARTED SNAPSHOTSTART
START BACKUP SNAPSHOTSTART WAIT STARTED
START BACKUP 4 WAIT COMPLETED SNAPSHOTSTART
START BACKUP SNAPSHOTEND WAIT COMPLETED
START BACKUP 4 NOWAIT SNAPSHOTSTART
建立備份的程序包括以下步驟
啟動管理用戶端 (ndb_mgm),如果尚未執行。
執行
START BACKUP
命令。這會產生幾行輸出,指示備份進度,如下所示ndb_mgm> START BACKUP Waiting for completed, this may take several minutes Node 2: Backup 1 started from node 1 Node 2: Backup 1 started from node 1 completed StartGCP: 177 StopGCP: 180 #Records: 7362 #LogRecords: 0 Data: 453648 bytes Log: 0 bytes ndb_mgm>
Backup backup_id started from node node_id
backup_id
是此特定備份的唯一識別碼。如果未以其他方式設定,此識別碼會儲存在叢集日誌中。node_id
是與資料節點協調備份的管理伺服器的識別碼。在備份程序的此時,叢集已收到並處理備份請求。這並不表示備份已完成。此陳述式的範例如下所示Node 2: Backup 1 started from node 1
管理用戶端會顯示類似這樣的訊息,表示備份已開始
Backup backup_id started from node node_id completed
與備份已開始的通知一樣,
backup_id
是此特定備份的唯一識別碼,而node_id
是與資料節點協調備份的管理伺服器的節點 ID。此輸出會伴隨其他資訊,包括相關的全域檢查點、備份的記錄數以及資料大小,如下所示Node 2: Backup 1 started from node 1 completed StartGCP: 177 StopGCP: 180 #Records: 7362 #LogRecords: 0 Data: 453648 bytes Log: 0 bytes
也可以透過在系統 Shell 中叫用 ndb_mgm 並搭配 -e
或 --execute
選項來執行備份,如此範例所示
$> ndb_mgm -e "START BACKUP 6 WAIT COMPLETED SNAPSHOTSTART"
以此方式使用 START BACKUP
時,您必須指定備份 ID。
預設情況下,叢集備份會在每個資料節點上的 DataDir
的 BACKUP
子目錄中建立。可以使用 BackupDataDir
組態參數,個別為一個或多個資料節點,或為 config.ini
檔案中的所有叢集資料節點覆寫此設定。使用指定 backup_id
建立的備份檔案會儲存在備份目錄中名為 BACKUP-
的子目錄中。backup_id
啟動管理用戶端。
執行此命令
ndb_mgm> ABORT BACKUP backup_id
數字
backup_id
是在備份開始時管理用戶端的響應中包含的備份識別碼 (在訊息從節點
)。management_node_id
開始的備份backup_id
管理用戶端會使用
已訂購取消備份
來確認中止請求。backup_id
注意此時,管理用戶端尚未收到來自叢集資料節點對此請求的回應,且尚未實際中止備份。
在中止備份後,管理用戶端會以類似如下的方式報告此事實
Node 1: Backup 3 started from 5 has been aborted. Error: 1321 - Backup aborted by user request: Permanent error: User defined error Node 3: Backup 3 started from 5 has been aborted. Error: 1323 - 1323: Permanent error: Internal error Node 2: Backup 3 started from 5 has been aborted. Error: 1323 - 1323: Permanent error: Internal error Node 4: Backup 3 started from 5 has been aborted. Error: 1323 - 1323: Permanent error: Internal error
在此範例中,我們展示了一個具有 4 個資料節點的叢集範例輸出,其中要中止的備份序號為
3
,且叢集管理客戶端連線的管理節點的節點 ID 為5
。第一個完成中止備份的節點報告說,中止的原因是使用者要求。(其餘節點報告說,備份由於未指定的內部錯誤而中止。)注意叢集節點不保證會以任何特定順序回應
ABORT BACKUP
命令。訊息
Backup
表示備份已終止,且所有與此備份相關的檔案已從叢集檔案系統中移除。backup_id
started from nodemanagement_node_id
has been aborted
也可以使用此命令,從系統 Shell 中中止正在進行的備份
$> ndb_mgm -e "ABORT BACKUP backup_id"
如果發出 ABORT BACKUP
時沒有具有 ID backup_id
的備份正在執行,則管理客戶端不會做出回應,叢集日誌中也不會指出已傳送無效的中止命令。