时间点恢复(即恢复自给定时间点以来进行的数据更改)是在还原完整备份(将服务器返回到创建备份时的状态)后执行的。可以使用原生 NDB
数据备份(通过在 ndb_mgm 客户端中发出 CREATE BACKUP
获取)和还原 ndb_binlog_index
表(从使用 mysqldump 创建的转储)来完成使用 NDB 集群和 NDB 集群复制对 NDB 集群表进行时间点恢复。
要执行 NDB 集群的时间点恢复,需要按照此处显示的步骤操作
使用 ndb_mgm 客户端中的
START BACKUP
命令备份集群中的所有NDB
数据库(请参阅 第 25.6.8 节“NDB 集群的在线备份”)。在稍后的某个时间点,在还原集群之前,对
mysql.ndb_binlog_index
表进行备份。使用 mysqldump 来完成此任务可能是最简单的。同时备份二进制日志文件。应定期更新此备份(甚至可能每小时更新一次),具体取决于您的需求。
(发生灾难性故障或错误。)
找到最后一个已知的良好备份。
清除数据节点文件系统(使用 ndbd
--initial
或 ndbmtd--initial
)。注意--initial
也会删除磁盘数据表空间和日志文件。对
mysql.ndb_binlog_index
表使用DROP TABLE
或TRUNCATE TABLE
。执行 ndb_restore,还原所有数据。运行 ndb_restore 时,必须包含
--restore-epoch
选项,以便正确填充ndb_apply_status
表。(有关更多信息,请参阅 第 25.5.23 节“ndb_restore — 还原 NDB 集群备份”。)从 mysqldump 的输出中还原
ndb_binlog_index
表,并从备份中还原二进制日志文件(如有必要)。在
ndb_apply_status
表中找到最近应用的纪元(即,最大epoch
列值)作为用户变量@LATEST_EPOCH
(已强调)SELECT @LATEST_EPOCH:=MAX(epoch) FROM mysql.ndb_apply_status;
在
ndb_binlog_index
表中找到与@LATEST_EPOCH
对应的最新二进制日志文件(@FIRST_FILE
)和位置(Position
列值)SELECT Position, @FIRST_FILE:=File FROM mysql.ndb_binlog_index WHERE epoch > @LATEST_EPOCH ORDER BY epoch ASC LIMIT 1;
使用 mysqlbinlog,从给定文件和位置重放二进制日志事件,直至发生故障。(请参阅 第 6.6.9 节“mysqlbinlog — 用于处理二进制日志文件的实用程序”。)
有关二进制日志、复制和增量恢复的更多信息,请参阅 第 9.5 节“时间点(增量)恢复”。