代替指定日期和时间,mysqlbinlog的 --start-position
和 --stop-position
选项 可用于指定日志位置。除了指定日志位置编号而不是日期以外,它们的工作方式与开始日期和停止日期选项相同。使用位置可以使您更精确地了解要恢复日志的哪一部分,尤其是在与损坏的SQL语句几乎同时发生许多事务的情况下。要确定位置号,请在执行不需要的事务时将mysqlbinlog运行 一段时间,但将结果重定向到文本文件进行检查。可以这样完成:
shell> 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
后跟数字。恢复先前的备份文件后,使用位置编号来处理二进制日志文件。例如,您将使用以下命令:
shell> mysqlbinlog --stop-position=368312 /var/log/mysql/bin.123456 \
| mysql -u root -p
shell> mysqlbinlog --start-position=368315 /var/log/mysql/bin.123456 \
| mysql -u root -p
第一个命令将恢复所有事务,直到给出停止位置为止。第二个命令从给定的开始位置恢复所有事务,直到二进制日志结束。由于mysqlbinlog的输出 SET TIMESTAMP
在记录每个SQL语句之前都包含语句,因此恢复的数据和相关的MySQL日志将反映执行事务的原始时间。