#### 23.7.9.2 使用 NDB 集群复制的时间点恢复

[](<>)[](<>)[](<>)

时间点恢复（即，恢复自给定时间点以来所做的数据更改）是在恢复完整备份后执行的，该备份将服务器返回到进行备份时的状态。使用 NDB Cluster 和 NDB Cluster Replication 执行 NDB Cluster 表的时间点恢复可以使用本机完成[`新开发银行`](mysql-cluster.html)数据备份（通过发出[`创建备份`](mysql-cluster-mgm-client-commands.html#ndbclient-create-nodegroup)在里面[**数据库\_毫克**](mysql-cluster-programs-ndb-mgm.html)客户端）并恢复`ndb_binlog_index`表（来自使用[**mysql转储**](mysqldump.html)）。

要执行 NDB Cluster 的时间点恢复，必须按照此处显示的步骤操作：

1.  全部备份`新开发银行`集群中的数据库，使用[`开始备份`](mysql-cluster-backup-using-management-client.html)命令在[**数据库\_毫克**](mysql-cluster-programs-ndb-mgm.html)客户（见[第 23.6.8 节，“NDB Cluster 的在线备份”](mysql-cluster-backup.html)）。

2.  稍后，在恢复集群之前，请备份`mysql.ndb_binlog_index`桌子。它可能是最简单的使用[**mysql转储**](mysqldump.html)对于这个任务。此时还要备份二进制日志文件。

    此备份应根据您的需要定期更新，甚至每小时更新一次。

3.  (*发生灾难性故障或错误*.)

4.  找到最后一个已知的良好备份。

5.  清除数据节点文件系统（使用[**ndbd**](mysql-cluster-programs-ndbd.html) [`- 最初的`](mysql-cluster-programs-ndbd.html#option_ndbd_initial)要么[**ndbmtd**](mysql-cluster-programs-ndbmtd.html) [`- 最初的`](mysql-cluster-programs-ndbd.html#option_ndbd_initial)）。

    笔记

    从 NDB 8.0.21 开始，磁盘数据表空间和日志文件被删除[`- 最初的`](mysql-cluster-programs-ndbd.html#option_ndbd_initial).以前，必须手动删除这些。

6.  采用[`删除表`](drop-table.html)要么[`截断表`](truncate-table.html)与`mysql.ndb_binlog_index`桌子。

7.  执行[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)，恢复所有数据。您必须包括[`--restore-epoch`](mysql-cluster-programs-ndb-restore.html#option_ndb_restore_restore-epoch)运行时的选项[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)， 所以这样`ndb_apply_status`表已正确填充。（看[第 23.5.23 节，“ndb_restore - 恢复 NDB Cluster 备份”](mysql-cluster-programs-ndb-restore.html)， 了解更多信息。）

8.  恢复`ndb_binlog_index`从输出表[**mysql转储**](mysqldump.html)并在必要时从备份中恢复二进制日志文件。

9.  找到最近应用的 epoch——即最大值`时代`列中的值`ndb_apply_status`表——作为用户变量`@LATEST_EPOCH`（强调）：

    ```
    SELECT @LATEST_EPOCH:=MAX(epoch)
        FROM mysql.ndb_apply_status;
    ```

10. 查找最新的二进制日志文件（`@FIRST_FILE`) 和位置 (`位置`列值）在此文件中对应于`@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;
    ```

11. 使用[**mysqlbinlog**](mysqlbinlog.html)，从给定文件重放二进制日志事件并定位到故障点。（看[第 4.6.9 节，“mysqlbinlog - 处理二进制日志文件的实用程序”](mysqlbinlog.html).)

    也可以看看[第 7.5 节，“时间点（增量）恢复”](point-in-time-recovery.html), 有关二进制日志、复制和增量恢复的更多信息。
