点时 恢复——即恢复自给定时间点以来的数据更改——是在恢复完整备份后执行的,以将服务器恢复到备份时的状态。使用 NDB 集群和 NDB 集群复制执行点时恢复 NDB 集群表,可以使用本机 NDB
数据备份(使用 CREATE BACKUP
在 ndb_mgm 客户端中)和恢复 ndb_binlog_index
表(使用 mysqldump 生成的转储)。
要执行 NDB 集群的点时恢复,需要按照以下步骤进行:
-
备份集群中的所有
NDB
数据库,使用START BACKUP
命令在 ndb_mgm 客户端中(见 第 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 — 恢复 NDB 集群备份”,以获取更多信息。) -
从 mysqldump 的输出中恢复
ndb_binlog_index
表,并恢复二进制日志文件,如果需要。 -
找到最近应用的 epoch(即
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 节,“点时间(增量)恢复”,以获取更多关于二进制日志、复制和增量恢复的信息。