MySQL日志
日志类别
MySQL中的日志文件是很重要的一部分内容,其记录了影响MySQL数据库的各种类型活动,可以帮助我们对MySQL数据库的运行状态进行诊断,常见的日志文件有四种:
- 错误日志(error log)
- 慢查询日志(slow query log)
- 查询日志(log)
- 二进制日志(binlong)
错误日志
简介
错误日志文件对MySQL的启动、运行、关闭过程进行了记录。不仅记录了所有的错误信息,也记录了一些警告信息或正确的信息。
我们可以通过下面的命令来定位该文件:
# 查看错误日志文件位置
SHOW VARIABLES LIKE 'log_error'\G;
默认情况下错误文件的文件名为服务器的主机名。
日志路径配置
当然错误日志文件的路径也可以通以下三种方式进行配置:
具体可以参照下面博客:
MySQL错误日志总结
慢查询日志
简介
慢查询日志可以帮助定位可能存在问题的SQL语句,从而进行SQL语句层面的优化,其中有几个重要的参数:
- long_query_time(超过该值的所有SQL语句都会被记录到慢查询日志文件中,注意等于该值不会被记录)
- slow_query_log(控制慢查询日志的开关,默认关闭)
- log_queries_not_using_indexes(将没有使用索引的语句记录到慢查询日志中)
- log_throttle_queries_not_using_indexes(每分钟允许记录到slow log的且未使用索引的SQL语句次数)
- log_output(指定了慢查询输出的格式,默认为FILE)
- slow_query_log_file(慢查询日志文件的位置)
参数的查询语句如下:
SHOW VARIABLES LIKE 'slow_query_log'\G;
日志查看
文件形式查看
如果越来越多的SQL查询被记录到了慢查询日志文件中,分析该文件可能就不会显得简单直观了,此时我们可以使用MySQL提供的mysqldumpslow命令:
# MySQL分析慢查询日志工具
mysqldumpslow mike-slow.log;
表形式查看
MySQL同样也支持将慢查询的日志记录放入到一张表里,但是需要将log_output输出格式设置为TABLE。
# 更改输出格式
SET GLOBAL log_output='TABLE';
# 查询表的方式查询
SELECT * FROM mysql.slow_log\G;
slow_log表默认使用的是CSV引擎,为了提升大数据量下的查询效率,我们可以人为地将引擎转换到MyISAM,并在start_time列上添加索引,需要注意的是该操作需要先关闭慢查询:
# 关闭慢查询
SET GLOBAL slow_query_log=off;
# 更改表引擎
ALTER TABLE mysql.slow_log ENGINE=MyISAM;
查询日志
简介
查询日志记录了所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行。同样地,查询日志也支持表的方式查看,由上述讲到的log_output参数控制,该表的使用方式和慢日志基本一样。
# 查询日志相关的参数
SHOW VARIABLES LIKE 'general_log%';
# 查询日志文件是否开启
SHOW VARIABLES LIKE 'general_log'\G;
# 查询日志文件的位置
SHOW VARIABLES LIKE 'general_log_file'\G;
# 查询表的方式查询
SELECT * FROM mysql.general_log;
二进制日志
简介
二进制日志记录了对MySQL数据库执行更改的所有操作,但是不包括SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。
# 查看二进制日志相关的参数
SHOW VARIABLES LIKE '%log_bin%';
# 查询二进制日志是否开启
SHOW VARIABLES LIKE 'log_bin';
# 查询binlog文件路径
SHOW VARIABLES LIKE 'datadir';
# 查询binlog文件名
SHOW MASTER STATUS;
# 查询binlog
SHOW BINLOG EVENTS IN 'log_file'\G;
二进制日志主要有以下几种作用:
- 恢复:某些数据的恢复需要二进制文件
- 复制:通过复制和执行二进制文件使一台远程主机的MySQL数据库与一台MySQL数据库进行实时同步
- 审计:用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的供给
二进制文件的主要参数:
- max_binlog_size:单个二进制文件的最大值,如果超过该值,则产生新的二进制日志文件,后缀名+1,并记录到.index文件
- binlog_cache_size:所有未提交的二进制日志都会被记录到缓存中,若缓存过小则会生成临时文件存储,此参数可以控制缓存区大小
- binlog_cache_use:记录了使用缓存区写二进制日志的次数
- binlog_cache_disk_use:记录了使用临时文件写二进制日志的次数
- sync_binlog:控制二进制日志同步到磁盘的时机
- binlog_do_db:控制需要写入哪些库的日志
- binlog_ignore_db:控制忽略写入哪些库的日志
- log_slave_update:控制是否将从master取得并执行的二进制日志写入自己的二进制日志文件中
- binlog_format:控制二进制日志的格式
日志查看
如果需要查看二进制文件的内容,必须通过MySQL提供的工具mysqlbinlog
# -vv可显示更多执行信息
mysqlbinlog --vv --start-position=200 test.00004
参考资料
MySQL错误日志总结
《MySQL技术内幕》:3.2日志文件
|