MySQL日志文件


01
概述
日志是记录了MySQL数据库的各种类型活动的数据 。DBA可以利用这些日志文件定位故障,优化性能等 。
02
分类
在MySQL中,有4种不同的日志,分别是:错误日志(errorlog)、二进制日志(binlog)、查询日志(log)和慢查询日志(slow query log) 。
2.1错误日志
1、概述错误日志记录了当mysqld进程启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息 。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志 。
2、设置查看:
SHOW VARIABLES LIKE ‘log_error’G;
路径设置:
可以使用—log-error=[file_name]选项来指定mysqld(MySQL服务器)保存错误日志文件的位置 。如果没有给定file_name值,mysqld使用错误日志名host_name.err并默认在参数DATADIR(数据目录)指定的目录中写入日志文件 。
在实际应用中,如果数据库启动报错或者crash,或者出现告警信息等,可以通过查看错误日志获取必要的信息 。
2.2 二进制日志1、概述二进制文件记录了对MySQL数据库的所有更新操作(其中还包括执行更新操作的时间等额外信息),不包括查询和SHOW这类操作(binlog作用就是备份恢复使用的,所以只需要记录修改操作即可) 。
二进制文件默认关闭,需要手动指定参数启动 。根据MySQL官方手册的测试数据,开启二进制日志会使性能下降1%,但是考虑到可以使用复制(replication)和point-in-time的恢复,这些性能的损失绝对是可以接受的 。
查看:
SHOW BINLOG EVENT IN ‘mysqld.00001’G;
配置:
通过参数log-bin[=name]可以开启二进制日志,如果不指定name,默认二进制日志文件名为主机名,后缀名为二进制日志的序列号,所在路径为数据库所在目录(datadir) 。
查看datadir:show variables like ‘datadir’;
2、参数max_binlog_size:指定了单个二进制日志文件最大值,如果超过该值,则产生新的二进制日志文件后缀名+1,并记录到.index文件 。
binlog_cache_size:控制缓冲大小,默认大小32K,基于会话的,因此每开启一个事务就分配一个binlog_cache_size大小的缓存,所以不能设置过大 。当一个事务的记录大于binlog_cache_size时,MySQL会把缓冲中的日志写入一个临时文件中,因此该值又不能设置太小 。
sync_binlog:表示每写缓冲多少次就要同步到磁盘 。如果设置为1,表示采用同步写磁盘的方式来写二进制日志,这时候写操作不使用操作系统的缓冲来写二进制日志 。sync_binlog的默认值为0,如果使用InnoDB存储引擎进行复制,并且想得到最大的可用性,建议将该值设置为ON(对数据库IO系统带来一定影响) 。
binlog-do-db:表示需要写入哪些库的日志,默认为空,表示需要同步所有库的日志到二进制日志 。
binlog-ignore-db:表示需要忽略写入哪些库的日志,默认为空,表示需要同步所有库的日志到二进制日志 。
log-slave-update:如果当前数据库是复制中的slave节点,则它不会将从master取得并执行的二进制日志写入自己的二进制文件中 。
binlog_format:记录二进制日志的格式 。在MySQL5.1之前,没有这个参数,所有二进制文件的格式都是基于SQL语句(statement)级别的,因此基于这个格式的二进制日志文件的复制(Replication)和Oracle的逻辑Standby有点类似 。
该值可以设置为STATEMENT、ROW和MIXED 。
1、STATEMENT格式下,记录的是逻辑SQL语句 。
2、ROW格式下,记录表的行更改情况 。
3、MIXED格式下,MySQL默认采用STATEMENT格式进行二进制文件记录,但是在一些情况下会使用ROW格式,这些情况包括:

推荐阅读