MySQL日志主要分为4类;
- 错误日志:记录MySQL服务的启动,运行或者停止MySQL服务时出现的问题
- 查询日志:记录建立的客户端连接和执行的语句
- 二进制日志:记录所有更改数据的语句,可以用于数据复制
- 慢查询日志:记录所有执行时间超过long_query_time的所有查询或不使用索引的查询
- 默认情况下,所有日志创建于MySQL数据目录中;通过刷新日志,可以强制MySQL关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)
- 当执行一个FLUSH LOGS语句或执行MySQLadmin flush-logs或MySQLadmin refresh时,将刷新日志
- 如果证使用MySQL复制功能,在复制服务器上可以维护更多日志文件,这种日志被称为接替日志
- 启动日志功能会降低,MySQL数据库的性能;例如:在查询非常频繁的MySQL数据库系统中,如果开启了通用查询日志和慢查询日志,MySQL数据库会花费很多时间记录日志;同时,日志会占用大量的磁盘空间
二进制日志
- 二进制日志主要记录MySQL数据库的变化
- 二进制日志以一种有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息
- 二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的语句;
- 语句以"事件"的形式保存,描述数据更改
- 二进制日志还包含关于每个更新数据库的语句的执行的时间信息;它不包含没有修改任何数据的语句;如果想要记录所有语句(例如:为了识别有哦问题的查询),需要使用一般查询日志
- 使用二进制日志的主要目的是最大可能地恢复数据库,因为二进制日志包含备份后进行的所有更新
- 每启动一次MySQL服务,将会产生一个新的日志文件
1.启动和设置二进制日志
默认情况下,二进制日志是关闭的,可以通过修改MySQL的配置文件来启动和设置二进制日志
my.ini中[MySQLd]组下面有几个设置是关于二进制日志的:
log-bin [=path/ [filename]]
expire_logs_days=10
max_binlog_size=100M
- log-bin定义开启二进制日志
- path表名日志文件所在的目录路径
- filename指定了日志我那件的名称,如未能见到全名为filename.000001,filename.000002等;出了上述文件之外,还有一个名称为filename.index的文件,文件内容为所有日志的清单,可以使用记事本打开该文件
- expire_logs_days定义了MySQL清除过期日志的时间,即二进制日志自动删除的天数;默认为0,表示不自动删除;当MySQL启动或刷新而精致日志时可能删除该文件
- max_binlog_size定义了单个文件的大小限制,如果而精致日志写入的内容大小超出给定值,日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件);不能将该变量设置为大于1GB或小于4096B,默认值是1GB
通过SHOW VARIABLES语句查询日志设置
由上面的查询结果可以看出,log_bin变量的值为ON,标明二进制日志已经打开
数据库文件最好不要与日志文件放在同一磁盘上,这样,当数据库文件所在的磁盘发生故障时,可以使用日志文件恢复数据
2.查看二进制日志
- SHOW binary logs语句可以查看当前的二进制日志文件个数及其文件名
- MySQL二进制日志并不能直接查看,如果要查看日志内容,可以通过MySQLbinlog命令查看
例子:
由上图可以看到,用对对fruits表进行了更新操作,语句为: "UPDATE fruits set f_price=5.00 WHERE f_id='a1';"
3.删除二进制日志
- MySQL的二进制文件可以配置自动删除,同时MySQL页提供了安全的手动删除二进制文件的方法
- RESET MASTER 删除所有的二进制日志文件
- PURGE MASTER LOGS只删除部分二进制日志文件
- 使用RESET MASTER语句删除所有二进制日志文件
RESET MASTER;
执行完该语句后,所有的二进制日志将被删除,MySQL会重新创建二进制日志,新的日志文件扩展名将会重新从000001开始编号
- 使用PURGE MASTER LOGS语句删除指定日志文件
PURGE {MASTER|BINARY} LOGS TO 'log_name';//指定文件名,执行改名了将删除文件名编号比指定文件名编号小的所有日志文件
PURGE {MASTER|BINARY} LOGS BEFORE 'date';//指定日期,执行该命令将删除指定日期以前的所有日志文件
4.使用二进制日志恢复数据库
mysqlbinlog [option] filename [mysql --uuser -ppass]
比较重要的两对option参数是:
- --start-date与stop-date:指定恢复数据库的其实时间点和结束时间点
- --start-position与--stop-position:指定恢复数据的开始位置和结束位置
6.暂时停止二进制日志功能
SET sql_log_bin={0|1};
- 为0时,将暂停记录二进制日志
- 为1时,经恢复记录二进制日志