25.7.9.2 NDB 集群基于时间点的恢复
基于时间点的恢复,即恢复自特定时间点以来的数据变更,可以在将服务器恢复到备份创建时的状态后进行。使用 NDB 集群和 NDB 集群复制对 NDB 集群表执行基于时间点的恢复,可以通过原生的 NDB
数据备份来实现(使用 CREATE BACKUP
命令在 ndb_mgm 客户端中执行)以及恢复 ndb_binlog_index
表(使用 mysqldump 进行的备份)。
要对 NDB 集群执行基于时间点的恢复,需要遵循以下步骤:
-
首先,在 ndb_mgm 客户端中使用
START BACKUP
命令对所有NDB
数据库进行备份(请参阅 第 25.6.8 章节,“NDB 集群的在线备份”)。 -
在恢复集群之前,务必备份
mysql.ndb_binlog_index
表格。使用mysqldump 可能是最简单的方法。此外,在这个时间点还应该备份二进制日志文件。这个备份应当定期更新——可能每小时一次——取决于您的需求。
-
(灾难性故障或错误发生.)
-
找到最后一个已知良好备份。
-
清理数据节点文件系统(使用ndbd
--initial
或ndbmtd--initial
)。Note磁盘数据表空间和日志文件也会被
--initial
清除。 -
使用
DROP TABLE
或TRUNCATE TABLE
删除mysql.ndb_binlog_index
表格。 -
执行ndb_restore,恢复所有数据。在运行ndb_restore时,您必须包括
--restore-epoch
选项,以确保ndb_apply_status
表被正确填充。请参阅第25.5.23节,“ndb_restore — Restore an NDB Cluster Backup”,获取更多信息。 -
从mysqldump的输出中恢复
ndb_binlog_index
表,并从备份中恢复二进制日志文件,如果必要。 -
找到最近应用的纪元,即
ndb_apply_status
表中的最大epoch
列值作为用户变量@LATEST_EPOCH
(强调):SELECT @LATEST_EPOCH:=MAX(epoch) FROM mysql.ndb_apply_status;
-
找到最新的二进制日志文件(
@FIRST_FILE
)和位置(Position
列值),这些与@LATEST_EPOCH
在ndb_binlog_index
表中对应: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节,“点时(增量)恢复”。