ndb居于时间点的恢复  ndb居于时间点的恢复的原理是根据mysql cluster的备份和mysql的二进制日志相结合起来,恢复到最近的一次备份,然后用二进制日志进行最近备份到出问题的时间点的恢复!注意这个恢复一定要在单用户模式下完成,避免因为用户访问造成数据的不一致!下面是恢复测试的详细过程! 建立测试的数据库和表CREATE DATABASE zhang;CREATE TABLE zhang (id INT,`name`VARCHAR(20),PRIMARY KEY(`id`))ENGINE=NDBCLUSTER; 插入测试数据INSERT INTO zhangVALUES(1,'zhang1'),(2,'zhang2'),(3,'zhang3'),(4,'zhang4'); 执行备份start backup再次插入几条数据(为了保持和正式环境尽可能接近,在插入数据中间穿插了flush logs操作!)INSERT INTO zhangVALUES(5,'zhang5'),(6,'zhang6');flush logs;INSERT INTO zhangVALUES(7,'zhang7'),(8,'zhang8'); 此时假设数据库挂掉了,需要进行恢复(恢复的时候只启动设置成单用户的mysqld节点):采用初始化方式启动ndbd,ndbd --initial,注意如果用到表空间和undo日志文件,需要手工清除,因为初始化不会删除这些文件!删除或者清空mysql.ndb_binlog_index表恢复表结构/usr/local/mysql/bin/ndb_restore-e  -c 192.168.3.221 -n 11 -b 1 -m--backup_path=/data/dbdata/BACKUP/BACKUP-1/恢复ndb节点11、12上的数据/usr/local/mysql/bin/ndb_restore-e  -c 192.168.3.221 -n 11 -b 1 -r--backup_path=/data/dbdata/BACKUP/BACKUP-1//usr/local/mysql/bin/ndb_restore-e  -c 192.168.3.221 -n 12 -b 1 -r--backup_path=/data/dbdata/BACKUP/BACKUP-1/ 找一个mysqld节点,进入单用户模式ENTER SINGLE USER MODE 21; 启动该mysqld节点,并登陆找到最大的epoch的值SELECT @LASTEPOCH:=MAX(epoch) FROMmysql.ndb_apply_status; 根据epoch的值,找到二进制日志的位置以及文件名SELECT POSITION, @FIRSTFILE:=FILEFROM mysql.ndb_binlog_indexWHERE epoch > @LASTEPOCHORDER BY epoch ASCLIMIT 1;结果为:829 ./mysql-bin.000012 找出恢复的时候需要用到的除第一个日志文件以外的其他的二进制日志文件SELECT DISTINCT FileFROM mysql.ndb_binlog_indexWHERE epoch > @LASTEPOCHAND File @FIRSTFILEORDER BY File;结果为:./mysql-bin.000013 然后进行二进制日志的恢复:mysqlbinlog -H--set-charset="utf8" -D --start-position=829 ./mysql-bin.000012 |grep -v "RELOAD DATABASE" |mysql -uroot -p123456 zhangmysqlbinlog -H--set-charset="utf8" -D --stop-datetime="2011-07-0410:30:00" ./mysql-bin.0000013 | grep -v "RELOAD DATABASE" |mysql-uroot -p123456 zhang恢复完成后,退出单用户模式,并启动另外一个sql节点  参考链接:http://dev.mysql.com/doc/mysql-cluster-excerpt/5.1/en/mysql-cluster-replication-pitr.htmlhttp://www.mysqlab.net/knowledge/kb/detail/topic/backup/id/8309
10-24 22:01
查看更多