MySQL Cluster在線備份和恢復

來自: http://www.cnblogs.com/shenfeng/p/mysqlcluster_backup_restore.html

備份方式

一般MySQL數據庫都是用 mysqldump 命令進行數據備份,其生成的文件實際上是創建對象和導入對象的sql語句。

在MySQL Cluster集群上,可以在管理節點上使用 start backup 命令實現數據庫的在線備份,在還原時可以使用 ndb_restore 命令來進行數據庫的還原。

使用MySQL Cluster的 start backup ,可以生成以下三種格式的備份文件:

  • BACKUP- backup-id . node_id .ctl

    ctl控制文件存儲表定義以及其他對象的元數據(metadata)。

  • BACKUP- backup-id . node_id .data

    data數據文件,保存的是表中的記錄行,由于數據節點分片的原因,沒有節點上文件的數據是不一致的。

  • BACKUP- backup-id . node_id .log

    log日志文件保存已提交的事物記錄。

上述文件中, backup-id 是備份標識, node_id 是數據節點的唯一編號。

備份命令

在ndb_mgm交互模式下,可以執行如下命令進行備份。

 START BACKUP [backup_id] [wait_option] [snapshot_option]

wait_option:WAIT {STARTED | COMPLETED} | NOWAIT

snapshot_option:

SNAPSHOTSTART | SNAPSHOTEND

命令后面帶3個參數,在交互模式下都是可選的。其中backuop_id如果添加,需要保持唯一。wait_option是指在ndb_mgm交互模式下,執行命令后是否將命令控制權返回給用戶。

wait_option: WAIT STARTED表示一旦備份開始,就把控制交給用戶;NOTWAIT表示用戶一執行命令,就把控制權返回給用戶;WAIT COMPLETED表示需要等備份全部結束才把控制權交還給用戶。默認的選項是WAIT COMPLETED。

snapshot_option: SNAPSHOTSTART表示備份文件的內容同開始備份時的數據庫快照一致,SNAPSHOTEND表示備份文件的內容同備份結束時的數據庫快照一致。SNAPSHOTEND是默認選項。

實際執行效果如下:

從上圖我們可以得出默認的backup_id是從1開始遞增的,備份文件會放在datadir的BACKUP目錄下,每一次備份都會子目錄BACKUP- backup_id 。因此備份轉移可以通過打包壓縮這個目錄然后轉移到備份服務器。

還原測試

單表還原

首先我在數據庫刪除一個測試表,然后通過 ndb_restore 命令來對數據進行還原。

還原單個表,需要一次在每個數據節點運行以下命令。

shell> ndb_restore [...] --include-databases=db1,db2 --include-tables=db3.t1,db3.t2

在執行單個節點還原后查詢數據,可以發現會有部分數據可以查詢到,說明還原的節點存儲了該表的部分數據。

shell> ndb_restore -c 192.168.1.131 -n 1 -b 1 -m -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1 --include-tables=testdb.dept

mysql> select count() from dept; +----------+ | count() | +----------+ | 25 | +----------+ 1 row in set (0.00 sec)</pre>

在后續節點上還原時就不需要指定 -m 選項來還原metadata,否則還原時會報 Restore: Failed to restore table: testdb/def/dept ... Exiting 錯誤。

整庫還原

首先進入單用戶模式。

 ndb_mgm> ENTER SINGLE USER MODE 9

ndb_mgm> EXIT SINGLE USER MODE</pre>

USER MODE 9表示只有一個還原程序通過nodeid為9的api節點連接。

假設集群中由于同一nodegroup的所有節點都宕機,且硬盤上的數據也無法恢復。則所有節點通過 ndbmtd --initial 啟動后,存放在ndb引擎上的數據都會丟失。此時,就需要調用ndb_restore進行數據庫的還原。

同時,為了防止其他用戶的接入操作,在完全操作前可以將集群進入上面所述的單用戶模式。

然后根據備份文件的位置,依次進行還原。其中只有第一個節點還原時要使用 -m 命令。

ndb_restore -c 192.168.1.131 -n 1 -b 1 -m -r --backup_path=/opt/backupfiles/BACKUP-1/1
ndb_restore -c 192.168.1.131 -n 2 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1
ndb_restore -c 192.168.1.131 -n 3 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1
ndb_restore -c 192.168.1.131 -n 4 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1

注意:所有數據節點的備份文件可以放到一個備份目錄下,還原程序會根據還原命令自行尋找對應的備份文件。

版權說明:camash原創,轉載請注明出處

</div>

 本文由用戶 MirtaMuirde 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!