MySQL中常见的日志文件

日志文件记录了影响MySQL数据库的各种类型活动。MySQL中常见的日志文件有:

  • 错误日志(error log)
  • 二进制日志(binlog)
  • 慢查询日志(slow query log)
  • 查询日志(log)
日志名称概况
错误日志(error log)错误日志文件对MySQL的启动、运行、关闭过程进行了记录。该文件不仅记录了所有的错误信息,也记录一些警告信息或正确的信息。
查看命令:SHOW VARIABLES LIKE 'log_error'运行后可查看错误文件的路径和文件名。
当数据库不能正常启动时,第一个必须查找的文件就是错误日志文件,该文件记录了错误信息,能很好的指导用户发现问题。
慢查询日志(slow query log)慢查询日志可帮助DBA定位可能存在问题的SQL语句,从而进行SQL语句层面的优化。
在默认情况下,MySQL数据库并不启动慢查询日志,用户需要手工将这个参数设为ON:SET GLOBAL slow_query_log=on;
查看超时阈值:SHOW VARIABLES LIKE 'long_query_time';
查看慢查询是否开启:SHOW VARIABLES LIKE 'log_slow_queries';
首先设置long_query_time这个阈值后,MySQLh数据库会记录运行时间超过该阈值的所有SQL语句,但运行时间正好等于阈值的情况并不会被记录下来。
另一个和慢查询日志有关的参数是log_queries_not_using_indexs,查看其状态:SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
参数log_throttle_queries_not_using_indexes,用来表示每分钟允许记录到slow log的且未使用索引的SQL语句次数。该值默认为0,表示没有限制。在生产环境下,若没有使用索引,此类SQL语句会频繁地被记录到slow log中从而导致slow log文件的大小不断增加,故DBA可通过该参数进行配置。
MySQL提供mysqldumpslow命令帮助DBA解决日志越来越多的日志文件直观问题。
参数作用
-vverbose
-d调试
-s ORDER按照(al,at,ar,c,l,r,t)排序,默认值为at
参数含义
alaverage lock time
araverage rows sent
ataverage query time
ccount
llock time
rrows sent
tquery time
-r反转排序
-t NUM仅查看前n行结果
-a不将所有的数字抽象为N,字符抽象为'S'
-n NUM数字至少抽象为n位
-g PATTERN相当于grep,只选取匹配后的字符
-h HOSTNAME数据库服务器名
-i NAME实例服务名
-l不从总时间中扣除锁定时间
参数log_output指定了慢查询输出的格式,默认为FILE,可以将其改为TABLE,然后就可以查询mysql架构下的slow_log表了: mysql> SHOW VARIABLES LIKE 'log_output';
mysql> SET GLOBAL log_output='TABLE';
用户可以通过额外的参数long_query_io将超过指定逻辑IO次数的SQL语句记录到slow log中,该值默认位100。参数slow_query_type用来表示slow log的方式,可选值为:
含义
0表示不将SQL语句记录到slow log
1表示根据运行时间将SQL语句记录到slow log
2表示根据逻辑IO次数将SQL语句记录到slow log
3表示根据运行时间及逻辑IO次数将SQL语句记录到slow log
查询日志(log)查询日志记录了所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行
查询日志在mysql的general_log表中,基本方法与slow_log一致
二进制日志(binary log)二进制日志记录了对MySQL数据库执行更改的所有操作,但是不包括SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。
查看二进制日志:SHOW BINLOG EVENT
二进制日志主要有以下几种作用:
恢复(recovery)某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复
复制(replication)其原理与恢复类似,通过复制和执行二进制日志使一台远程的MySQL数据库(一般为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步
审计(audit)用户可以通过二进制日志中的信息进行审计,判断是否有对数据库进行注入的攻击
通过配置参数log-bin[=name]可以启动二进制日志,如果不指定name,则默认二进制文件名为主机名,后缀名为二进制日志的序列号。
以下配置文件的参数影响着二进制日志记录信息和行为:
参数作用
max_binlog_size指定了单个二进制日志文件的最大值,如果超过该值,则产生新的二进制日志文件,后缀名+1,并记录到.index文件
binlog_cache_size当使用事务的表存储引擎时,所有未提交的二进制日志会被记录到一个缓存中去,该事务提交时直接将缓冲中的二进制日志写入二进制文件,该缓冲的大小由binlog_cache_size决定,默认大小为32k。此外binlog_cache_size是基于会话的,当一个线程开始一个事务时,MySQL会自动分配一个大小为binlog_cache_size的缓存。可通过SHOW GLOBAL STATUS查看binlog_cache_use、binlog_cache_disk_use的状态以判断当前binlog_cache_size是否合适。binlog_cache_use记录了使用缓冲写二进制日志的次数,binlog_cache_disk_use记录了使用临时文件写二进制日志的次数。
sync_binlogsync_binlog=[N]表示每写缓冲多少次就同步到磁盘。如果N设定为1,表示次啊用同步写磁盘的方式来写二进制日志,这时写操作不使用操作系统的缓冲来写二进制日志。sync_binlog的默认值为0.
binlog-do-db表示需要写入哪些库的日志。默认为空,表示需要同步所有库的日志到二进制日志
binlog-ignore-db表示忽略写入哪些库的日志。默认为空,表示需要同步所有库的日志到二进制日志
log-slave-update如果当前数据库是复制中的slave角色,则它不会从master取得并执行的二进制日志写入到自己的二进制文件中去。如果需要写入,则设置log-slave-update。若须搭建master->slave>slave架构的复制,则必须设置该参数
binlog_format它影响记录二进制日志的格式。
作用
STATEMENT二进制日志文件记录的是日志的逻辑SQL语句
ROW二进制日志记录的不再是简单的SQL语句,而是记录表的行更改情况。
MIXEDMySQL默认采用STATEMENT格式进行二进制日志文件的记录但在一些情况下会使用ROW格式,可能的情况有:(1)表的存储引擎为NDB (2)使用了UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT()等不确定函数(3)使用了INSERT DELAY语句(4)使用了用户定义函数(UDF)(5)使用了临时表
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盛者无名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值