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.deptmysql> 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 9ndb_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>