MySQL 8.0 参考手册  / 第 7 章备份与恢复  / 7.5 时间点(增量)恢复  /  7.5.2 使用事件位置的时间点恢复

7.5.2 使用事件位置的时间点恢复

mysqlbinlog--start-position的和 --stop-position选项 可用于指定日志位置 ,而不是指定日期和时间 。它们与开始和结束日期选项的工作方式相同,只是您指定日志位置编号而不是日期。使用位置可以使您更精确地确定要恢复日志的哪一部分,尤其是在许多事务与破坏性 SQL 语句同时发生的情况下。要确定位置编号, 请在接近执行不需要的事务的时间范围内运行mysqlbinlog ,但将结果重定向到文本文件以供检查。这可以这样做:

$> mysqlbinlog --start-datetime="2005-04-20 9:55:00" \
         --stop-datetime="2005-04-20 10:05:00" \
         /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

此命令在 /tmp目录中创建一个小文本文件,其中包含执行有害 SQL 语句时前后的 SQL 语句。使用文本编辑器打开此文件并查找您不想重复的语句。确定二进制日志中用于停止和恢复恢复的位置并记下它们。位置标记为 log_pos后跟数字。恢复之前的备份文件后,使用位置编号处理二进制日志文件。例如,您将使用如下命令:

$> mysqlbinlog --stop-position=368312 /var/log/mysql/bin.123456 \
         | mysql -u root -p

$> mysqlbinlog --start-position=368315 /var/log/mysql/bin.123456 \
         | mysql -u root -p

第一个命令恢复所有事务,直到给定的停止位置。第二个命令恢复从给定的起始位置到二进制日志末尾的所有事务。因为 mysqlbinlog的输出包含SET TIMESTAMP了每条记录的SQL语句之前的语句,所以恢复的数据和相关的MySQL日志反映了事务执行的原始时间。