常见的日志文件有:
- 错误日志(error log)
- 二进制日志(binlog)
- 慢查询日志(slow query log)
- 查询日志(log)
这些日志文件可以帮助DBA对MySQL数据库的运行状态进行诊断,从而更好地进行数据库层面的优化。
错误日志
- 对启动、运行、关闭过程进行记录。
- 遇到问题应首先查看该文件以便定位问题。
- 记录所有错误信息、一些警告信息或正确信息。
- 命令
show variables like 'log_error';
定位此文件。
默认情况错误文件名为服务器主机名。
慢查询日志
- 帮助DBA定位可能存在问题的SQL语句。
- 在启动时设置阈值,将运行时间超过该值的所有SQL语句记录。
- 默认不启动慢查询日志,需手工开启。
慢查询输出改成表
5.1开始可以将慢查询日志记录放入mysql库
中的slow_log表
。可以把slow_log表引擎改为MyISAM
,并在start_time
列加索引。但是已启动慢查询时不能修改引擎。且使用 MyISAM 还会有额外开销。
捕获方式
物理读取:从磁盘进行IO读取次数。
逻辑读取:包含所有读取,不管是磁盘还是缓冲池。
启用方式
- 0表示
不
将SQL语句记录
到slow log - 1表示根据
运行时间
将SQL语句记录到slow log - 2表示根据
逻辑IO次数
将SQL语句记录到slow log - 3表示根据
运行时间
及逻辑IO次数
将SQL语句记录到slow log
# 启用慢查询的方式
slow_query_type=3
# 慢查询SQL日志
log_slow_queries=ON
# 阈值(大于记录,小于等于不记;默认10秒,后来使用微秒)
long_query_time=10
# 未使用索引的慢查询SQL
log_queries_not_using_indexes=ON
# 每分钟记录多少条未使用索引的慢查询SQL,默认0,表示不限条数
log_throttle_queries_not_using_indexes=0
# 记录超过指定逻辑IO次数SQL,默认100次
long_query_io= 100
# 设置慢查询输出格式,默认FILE,可以改成TABLE
# 这个参数是动态且全局的,可以在线修改。
log_output=TABLE
# dump慢查询日志
$ mysqldumpslow nh122-190-slow.log
# 获取执行时间最长的10条SQL语句
$ mysqldumpslow -s al -n 10 david.log
查询日志
- 记录所有对MySQL的请求信息,无论是否成功。
- 默认文件名:主机名.log。
- 可以转成表,记录在
mysql库
中的general_log表
。 - 其他和慢查询日志基本一样。
二进制日志(binarylog)
- 记录更改操作,但不包括
select 和 show
这类不修改数据的操作。 - update 操作如果返回影响行数为0,也会记录。
- 如果不知道name,默认为
主机名.序列号
,路径为数据库所在目录(datadir
)。 - 开启会使性能下降1%,但是考虑复制和恢复,可以接受。
主要作用
-
恢复(recovery)
:某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复。 -
复制(replication)
:其原理与恢复类似,通过复制和执行二进制日志使一台远程的MySQL数据库(一般称为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步。 -
审计(audit)
:用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击。
记录格式
-
statement
:记录逻辑SQL语句,使用rand、uuid等函数会造成数据不一致。 -
row
:记录表的行更改情况,设置这个格式可将事务隔离级别设为读已提交
,以获得更好的并发性。通常设为row,但是二进制文件也变大,执行时间也增加。 -
mixed
:默认采用statement格式记录,在一些情况会使用row格式。
查看二进制文件
由于是二进制,必须使用MySQL提供的工具mysqlbinlog
# 启动二进制日志,默认不启动,需手工启动
log-bin [=name]
# 查看statement格式文件
$ mysqlbinlog --start-position=203 test.000004
# 查看row格式
$ mysqlbinlog -vv --start-position=1065 test.00004
网友评论