13-数据恢复
对于用“start backup”进行备份的 Cluster,必须使用 ndb_restore 工具进行数据恢复。ndb_restore是MySQL Cluster带的管理工具,在 shell中执行,而不是 ndb_mgm工具中的一个命令。在前面的例子中,再增加一些测试数据,这样能更加真实地模拟实际环境;然后进行备份,备份ID为3。
备份前的数据为:
mysql> select count(1) from t1;
+----------+
| count(1) |
+----------+
| 65536 |
+----------+
1 row in set (0.00 sec)
进行数据恢复的操作步骤如下。
(1)在数据节点2(数据节点192.168.7.187)的shell命令行中执行如下命令:
[zzx2@zzx mysql-cluster]$ ndb_restore -b 3 -n 2 -c host=192.168.7.187:1186 -m -r/home/zzx2/mysql/data/BACKUP/BACKUP-3
Backup Id = 3
Nodeid = 2
backup path = /home/zzx2/mysql/data/BACKUP/BACKUP-3
Ndb version in backup files: Version 5.1.11
Connected to ndb!!
Successfully restored table test/def/t1
Successfully restored table event REPL$test/t1
Processing data in table: cluster/def/NDB$BLOB_2_3(3) fragment 0
Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 0
Processing data in table: test/def/t1(5) fragment 0
Processing data in table: cluster/def/schema(2) fragment 0
Processing data in table: cluster/def/apply_status(4) fragment 0
Processing data in table: sys/def/SYSTAB_0(0) fragment 0
Restored 32556 tuples and 0 log entries
NDBT_ProgramExit: 0 – OK
其中,命令行中的各参数含义分别如表32-2所示。
表32-2 相关参数及其说明
因为是第一个节点恢复,所以需要添加参数-m 来恢复表定义,这样在其他节点恢复时就不需要再加此参数,否则会报如下错误:
Table or index with given name already exists
Restore: Failed to restore table: cluster/def/NDB$BLOB_2_3 ... Exiting
(2)从节点4(SQL节点192.168.7.187)登录数据库,查看表t1中的数据:
mysql> select count(1) from t1;
+----------+
| count(1) |
+----------+
| 32556 |
+----------+
1 row in set (0.01 sec)
可以发现,由于只从一个数据节点恢复了数据,所以数据量只有备份时的一半左右。此时再从另外一个数据节点恢复数据。
(3)在节点3(数据节点192.168.7.55)的shell命令行中执行如下命令:
[zzx2@test55 BACKUP-1]$ ndb_restore -b 3 -n 3 -c host=192.168.7.187:1186 -r/home1/zzx2/mysql/data/BACKUP/BACKUP-3
Backup Id = 3
Nodeid = 3
backup path = /home1/zzx2/mysql/data/BACKUP/BACKUP-3
Ndb version in backup files: Version 5.1.11
Connected to ndb!!
Processing data in table: cluster/def/NDB$BLOB_2_3(3) fragment 1
Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 1
Processing data in table: test/def/t1(5) fragment 1
Processing data in table: cluster/def/schema(2) fragment 1
Processing data in table: cluster/def/apply_status(4) fragment 1
Processing data in table: sys/def/SYSTAB_0(0) fragment 1
Restored 32980 tuples and 0 log entries
NDBT_ProgramExit: 0 – OK
(4)再次从节点4(SQL节点192.168.7.187)登录数据库,查看表t1中的数据:
mysql> select count(1) from t1;
+----------+
| count(1) |
+----------+
| 65536 |
+----------+
1 row in set (0.00 sec)
此时,数据已经完全恢复正常,恢复过程结束。