MySQL中日志主要分为三类:
- 二进制日志:以二进制文件的形式记录数据库中所有更改数据的语句。
- 错误日志:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题。
- 查询日志:又分为通用查询日志和慢查询日志。其中通用查询日志记录建立的客户端连接和记录查询的信息;慢查询日志记录所有执行时间超过long_query_time的所有查询或不使用索引的查询。
二进制日志
二进制日志记录了所有的DDL语句和DML语句对数据的更改操作。语句以“事件”的形式保存,它描述了数据的更改过程。二进制日志时基于时间点的恢复,对于数据灾难时的数据恢复起着极其重要的作用。
二进制文件主要包括如下两类文件。
- 二进制日志索引文件:用于记录所有的二进制文件,文件后缀为.index。
- 二进制日志文件:用于记录数据库所有的DDL语句和DML(除了select操作)语句的事件,文件后缀名为.00000n,n是从1开始的自然数。
1.启动和设置二进制日志
- 默认情况下。二进制日志是关闭的,可以通过修改MySQL的配置文件my.ini来设置和启动二进制日志。
show variables like "%char%"; 在MySQL中输入这个就可以看到文件运行的地址
在配置文件my.ini中与二进制日志相关的参数在[mysqld]组中设置,主要参数如下。
[mysqld]
log-bin[=path/[filename]]
expire_logs_days=10
max_binlog_size=100M
- log-bin:用于开启二进制日志;path表明日志文件所在的物理路径,在目录的文件夹命名中不能有空格,否则在访问日志时会报错。filename则指定了日志文件的名称,如文件的命名为filename.000001等,另外还有一个名称为filename.index的文件,文件内容为所有日志的清单,该文件为文本文件。
- expire_logs_days:用来定义MySQL清除过期日志的时间,即二进制日志自动删除的天数。默认值为0,表示没有自动删除。
- max_binlog_size:表示定义了单个日志文件的大小限制,如果二进制日志写入的内容大下超出给定值,日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)。不能将改变量设置大于1GB或小于4KB。默认值时1GB。
- 设置完成需要重启MySQL服务才会生效。
- 可以通过 show variables 语句来查询日志设置。
从二进制日志中恢复数据
mysqlbinlog [option] filename |mysql -uuser -ppassword
其中filename为二进制日志文件名,option为可选参数,说明如下:
- –start-date:恢复数据操作的起始时间点。
- –stop-date:恢复数据操作的结束时间点。
- –start-position:恢复数据操作的起始偏移位置。
- –stop-position:恢复数据操作的结束偏移位置
举例
使用mysqlbinlog恢复MySQL数据库到2017年10月24日09:57:00时的状态。
(1)首先,在存放二进制文件的目录下找到2017年10月24日09:57:00这个时间点的日志文件对应为logbin.000004。
(2)在终端,将二进制文件所在的目录设置为当前目录。
(3)在MySQL终端输入以下命令:
mysqlbinlog --start-data="2017-10-24 09:57:00" "C:\Program Files\logbin.000004" |mysql -uroot -p123456
现在就已经恢复完成了
举例
使用mysqlbinlog恢复logbin.000001文件中偏移位置从179至288之间的所有操作恢复。
mysqlbinlog --start-position=179 --stop-position=309 --databases=bank logbin.000001 | mysql -uroot -p123456
bank是数据库名
删除二进制日志
二进制日志文件记录用户对数据库的修改操作,随着时间的推移,该文件会不断的增长,势必会影响数据库服务器的性能,对于过期的二进制日志应当及时删除。MySQL的二进制日志文件可以配置为自动删除,也可以采用安全的手动删除方法。
(1)使用reset master 语句删除所有二进制日志文件:
RESET MASTER
执行该语句后,当前数据库服务器下所有的二进制日志文件将被删除,MySQL会重新创建二进制文件,日志文件扩展名的编号重新从000001开始。
(2)使用purge master logs 语句删除指定日志文件有两种方法:
PURGE {MASTER|BINARY} LOGS TO 'log_name';
或
PURGE {MASTER|BINARY} LOGS BEFORE 'data'
其中MASTER和BINARY等效,第一种方法是指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志。第二张是指定日期,执行该命令将删除指定日期以前的所有日志。
错误日志
1.启动和设置错误日志
默认情况下,MySQL会开启错误日志,用于记录MySQL服务器运行过程中发生的错误相关信息。错误日志文件默认放在MySQL服务器的data目录下,文件名默认为主机名.err.
在my.ini中配置
[mysqld]
log-error=[path/[file_name]]
path为日志所在的目录路径,file_name为日志文件名,修改后重启即可
2.查看错误日志
show variables like 'log_error';
返回错误日志名和路径
3.删除错误日志重新加载
mysql>flush logs;
或
C:\mysqladmin -uroot -p123456 flush logs;