本节介绍使用二进制日志执行时间点恢复的一般思路。下一节, 第 7.5.2 节,“使用事件位置的时间点恢复”,将通过示例详细说明操作。
本节和下一节中的许多示例使用
mysql客户端来处理mysqlbinlog生成的二进制日志输出。如果您的二进制日志包含(空)字符,则除非您使用该
选项
调用它,否则mysql\0
无法解析该输出。--binary-mode
时间点恢复的信息源是完整备份操作之后生成的一组二进制日志文件。因此,要允许服务器恢复到某个时间点,必须在其上启用二进制日志记录(有关详细信息,请参阅 第 5.4.4 节,“二进制日志”)。
要从二进制日志中恢复数据,您必须知道当前二进制日志文件的名称和位置。默认情况下,服务器在数据目录中创建二进制日志文件,但可以指定一个路径名,并
--log-bin
选择将文件放在不同的位置。要查看所有二进制日志文件的列表,请使用以下语句:
mysql> SHOW BINARY LOGS;
要确定当前二进制日志文件的名称,请发出以下语句:
mysql> SHOW MASTER STATUS;
mysqlbinlog实用程序将二进制日志文件中 的事件从二进制格式转换为文本,以便可以查看或应用它们。mysqlbinlog具有根据事件时间或事件在日志中的位置选择二进制日志部分的选项。请参阅 第 4.6.7 节,“mysqlbinlog — 用于处理二进制日志文件的实用程序”。
应用二进制日志中的事件会导致重新执行它们所代表的数据修改。这使得能够恢复给定时间跨度内的数据更改。要应用二进制日志中的事件,请 使用mysql客户端处理mysqlbinlog输出 :
$> mysqlbinlog binlog_files | mysql -u root -p
当您需要确定事件时间或位置以在执行事件之前选择部分日志内容时,查看日志内容会很有用。要从日志中查看事件,请将 mysqlbinlog输出发送到分页程序中:
$> mysqlbinlog binlog_files | more
或者,将输出保存在文件中并在文本编辑器中查看该文件:
$> mysqlbinlog binlog_files > tmpfile
$> ... edit tmpfile ...
编辑文件后,应用如下内容:
$> mysql -u root -p < tmpfile
如果你有多个二进制日志要应用到MySQL服务器上,使用一个连接来应用你要处理的所有二进制日志文件的内容。这是一种方法:
$> mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
另一种方法是将整个日志写入单个文件,然后处理该文件:
$> mysqlbinlog binlog.000001 > /tmp/statements.sql
$> mysqlbinlog binlog.000002 >> /tmp/statements.sql
$> mysql -u root -p -e "source /tmp/statements.sql"