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日志文件保存已提交的事物记录。
</ul>
上述文件中, 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)
在后续节点上还原时就不需要指定 -m 选项来还原metadata,否则还原时会报 Restore: Failed to restore table: testdb/def/dept ... Exiting 错误。
整库还原
首先进入单用户模式。
ndb_mgm> ENTER SINGLE USER MODE 9 ndb_mgm> EXIT SINGLE USER MODE
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>