当前位置:首页 > 时尚 > mysql日志有哪几种 正文

mysql日志有哪几种

时间:2026-10-17 05:09:34 来源:力不从心网

MySQL的志有种日志系统不是摆设,是志有种排查问题的第一现场。我见过太多人一遇到主从延迟就重启数据库,志有种结果连错误日志都没翻过。志有种今天直接拆开讲,志有种MySQL到底有哪几种日志,志有种各自干什么用。志有种

错误日志:最该先看的志有种东西

错误日志记录的是MySQL启动、运行、志有种关闭过程中的志有种异常信息。位置通常在datadir下,志有种文件名一般是志有种hostname.err。你可以用SHOW VARIABLES LIKE 'log_error';确认路径。志有种

我印象很深的志有种一次,某台从库突然不同步了,志有种SHOW SLAVE STATUS显示Last_IO_Error是连接超时。但为什么超时?翻错误日志才看到,磁盘满了,relay log写不进去。没有错误日志,你只能瞎猜。

这个日志默认开启,别关。生产环境里,它是你排查崩溃、权限拒绝、端口占用等问题的起点。

二进制日志:复制和恢复的命根子

binlog记录所有对数据产生变更的操作,比如INSERT、UPDATE、DELETE,但SELECT不记。它有三种格式:STATEMENT、ROW、MIXED。现在默认用ROW,因为更安全,不会出现主从数据不一致。

binlog的用处就两个:主从复制和时间点恢复。主库把binlog发给从库,从库重放一遍。恢复时,你用全量备份加上binlog,能回滚到误删前的某一秒。

有个细节要注意:sync_binlog参数控制刷盘频率。设成1最安全,但性能会降。很多互联网公司设成100或0,赌的是机器不宕机。赌输了就是数据丢失,自己权衡。

慢查询日志:性能优化的入口

慢查询日志记录执行时间超过long_query_time的SQL。默认10秒,生产环境建议改成1秒甚至0.5秒。开启方式:SET GLOBAL slow_query_log = ON;,日志路径由slow_query_log_file指定。

我见过一个报表查询扫了800万行,慢日志里清清楚楚写着Rows_examined: 8000000。你不开这个日志,就不知道谁在拖垮数据库。配合pt-query-digest工具分析,能快速定位TOP SQL。

还有个参数log_queries_not_using_indexes,记录没走索引的查询。但线上别随便开,日志量会爆炸。

查询日志:一般不开,开了要命

通用查询日志记录所有SQL语句,包括SELECT。默认关闭,因为写压力太大。你调试时临时开一下可以,生产环境长期开就是给自己找麻烦。磁盘I/O会被吃掉一大块,日志文件涨得飞快。

我只有一次在测试环境开过,为了抓一个ORM框架生成的奇怪SQL。抓完立刻关掉。记住:这个日志是手术刀,不是日常工具。

中继日志:从库专属的临时中转站

relay log只在从库存在。从库的I/O线程把主库binlog拉过来,先写到relay log,然后SQL线程再读取relay log执行。它就像个缓冲区,避免网络波动直接冲击SQL线程。

如果从库崩溃,relay log可能损坏。这时候你会看到Relay log read failure。解决办法通常是RESET SLAVE重新拉取。别手动去改relay log文件,那是自找麻烦。

还有两个偏门的:DDL日志和undo日志

DDL日志在MySQL 8.0里叫ddl_log,记录DDL操作,用于崩溃恢复时保证原子性。undo日志属于InnoDB层,不是Server层日志,它保证事务回滚和MVCC。严格说,undo不是“MySQL日志”这个分类里的,但面试常问,你得知道。

总结一下实际工作中的优先级:错误日志天天看,慢查询日志每周分析,binlog必须开且定期备份,查询日志能不开就不开。relay log出问题先看网络和磁盘。别把日志当负担,它们是数据库在跟你说话。

推荐内容