7.3 日志管理

7.3 日志管理

在实际操作中,用户和系统管理员不可能随时备份数据,但当数据丢失或数据库文件损坏时,使用备份文件只能恢复到备份文件创建的时间点,而在这之后更新的数据就无能为力了。解决这个问题的办法就是使用MySQL二进制日志。

MySQL有几个不同的日志文件,可以帮助用户找出MySQL内部发生的事情。表7-2列出了MySQL日志文件及其说明。

表7-2 MySQL日志文件说明

1.启用日志

二进制日志包含了所有更新了数据或者已经潜在更新了的数据(例如,没有匹配任何行的一个delete)的所有语句。语句以“事件”的形式保存,其描述数据的修改。

二进制文件已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用。

二进制日志可以在启动服务器时启用,这需要修改my.ini选项文件。打开该文件,找到[mysqld]所在行,在该行后面加上以下格式的一行:

加入该选项后,服务器启动时就会加载该选项,从而启用二进制日志。如果filename包含扩展名,则扩展名被忽略。MySQL服务器为每个二进制日志名后边添加一个数字扩展名。每次启动服务器或刷新日志时,该数字增加1。如果未给出filename,则默认为主机名。假设这里filename取名为bin_log。若不指定目录,则在MySQL的data目录下自动创建二进制日志文件。由于下边使用mysqlbinlog工具处理日志时,日志必须处于bin目录下,因此日志的路径就指定为bin目录,添加的行改为以下一行。

保存,重启服务器。

重启服务器的方法可以是:

此时,MySQL安装目录的bin目录下多出了两个文件bin_log.000001和bin_log.index。

bin_log.000001就是二进制文件,以二进制形式存储,用户保存数据库更新信息。当这个日志文件大小达到最大,MySQL还会自动创建新的二进制文件。bin_log.index是服务器自动创建的二进制日志索引文件,包含所有使用的二进制日志文件的文件名。

2.用mysqlbinlog处理日志

使用mysqlbinlog实用工具可以检查二进制日志文件。

格式:

说明:

日志文件名,是二进制日志文件。

例如,运行以下命令可以查看bin_log.000001的内容:

由于二进制数据可能非常庞大,无法在屏幕上延伸,可以将其保存到文本文件中:

使用日志恢复数据的命令格式如下:

【例7.2】假设用户在周日下午1点进行了数据库stuinfo的完全备份,备份文件为file.sql。用户从星期日下午1点开始启用日志,bin_log.000001文件保存了从周日下午1点到周一下午1点的所有修改。在周一下午1点运行一条SQL语句:flush logs;,此时创建了bin_log000002文件,在周二下午1点时数据库崩溃。现要将数据库恢复到周二下午1点时的状态。

①将数据库恢复到周日下午1点时的状态。

②使用下列命令将数据库恢复到周一下午1点时的状态:

③使用以下命令即可将数据库恢复到周二下午1点时的状态:

由于日志文件要占用很大的硬盘资源,因此需要及时将没有用的日志文件清除掉。以下SQL语句可以清除所有的日志文件:

如果要删除部分日志文件,可以使用purge logs语句。

格式:

语法说明:

①第一条语句用于删除日志文件名指定的日志文件。

②第二条语句用于删除时间在日期之前的所有日志文件。

③master和binary是同义词。