MySQL的四种日志
在MySQL中,有4种不同的日志,分别是错误日志、二进制日志(BINLOG日志)、查询日志和慢查询日志
错误日志
错误日志记录了MySQL在启动、停止、以及服务器在运行过程中发生任何严重错误的相关信息。
该日志是默认开启的,查看错误日志的位置
mysql> show variables like 'log_error%'; +----------------------------+----------------------------------------+ | Variable_name | Value | +----------------------------+----------------------------------------+ | log_error | .\XIEJINCHI.err | | log_error_services | log_filter_internal; log_sink_internal | | log_error_suppression_list | | | log_error_verbosity | 2 | +----------------------------+----------------------------------------+ 4 rows in set, 1 warning (0.06 sec)
二进制日志
二进制日志(BINLOG日志)记录了所有DDL(数据库定义语言)语句和DML(数据操纵语言)语句,但是不包括查询语句,此日志对于灾难时的数据恢复有非常重要的作用,MySQL的主从复制,就是通过该日志实现的
二进制日志默认情况下是没有开启的,需要到MySQL的配置文件中开启,并配置MySQL日志的格式
查看binlog日志是否开启
mysql> show variables like '%log_bin%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | OFF | | log_bin_basename | | | log_bin_index | | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+-------+ 6 rows in set (0.00 sec)
开启binlog,如果没有指定日志文件的路径,默认写入MySQL的数据目录
#文件名 log-bin=mysql-bin #序列号 server-id=1 #日志格式 binlog_format=STATEMENT
在 MySQL 5.7.3 及以后版本,如果没有设置server-id, 那么设置binlog后无法开启MySQL服务
日志格式
STATEMENT
这个格式的日志文件中记录的都是SQL语句,每一条对数据进行修改的SQL都会记录在日志文件中,通过MySQL提供的mysqlbinlog工具,可以清晰的查看到每一条语句的文本,主从复制的时候,从库(slave)会将日志解析为原文本,并在从库重新执行一次
ROW
这个格式的日志文件记录的是每一行数据的变更,而不是SQL语句
MIXED
这个是目前MySQL默认的日志格式,混合了STATEMENT和ROW两种格式,默认情况下使用STATEMENT,但是在一些特殊情况下采用ROW来进行记录。MIXED格式能尽量利用两种模式的优点,而避开它们的缺点。
查看binlog日志
查看日志文件存放的位置
mysql> show variables like '%log_bin%'; +---------------------------------+--------------------------------+ | Variable_name | Value | +---------------------------------+--------------------------------+ | log_bin | ON | | log_bin_basename | /var/lib/mysql/mysql-bin | | log_bin_index | /var/lib/mysql/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+--------------------------------+ 6 rows in set (0.00 sec)
mysql-bin.index:是日志的索引文件,记录日志的文件名
mysql-bin:是日志文件
查看binlog文件列表 show binary logs;
查看binlog文件内容 show binlog events in 'mysql-bin.000001';
binlog日志的删除
对于比较繁忙的系统,由于每天生成大量的日志,这些日志如果长时间不清除,就会占用大量的磁盘空间
删除方式一:通过 Reset Master 指令删除全部日志,日志编号重新开始
mysql> reset master; Query OK, 0 rows affected (0.00 sec)
删除方式二:删除指定编号之前的日志文件,比如删除mysql-bin.000001之前的文件
mysql> purge master logs to 'mysql-bin.000001'; Query OK, 0 rows affected (0.00 sec)
删除方式三:删除某个时间点之前的日志
mysql> purge master logs before '2021-10-19 00:00:00 '; Query OK, 0 rows affected, 1 warning (0.01 sec)
删除方式四:设置日志的过期时间,单位为天,到期自动删除日志
查看binlog的过期时间
mysql> show variables like "%expire_logs%"; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | expire_logs_days | 0 | +------------------+-------+ 1 row in set (0.01 sec)
0 表示永不过期
修改MySQL配置文件,设置binlog过期时间,然后重启MySQL
expire_logs_days=15 #达到过期时间并不会立即删掉,binlog大小超过max_binlog_size才会删掉 max_binlog_size=500M
查询日志
查询日志中记录了客户端所有操作语句,包括select语句
查看查询日志是否开启,OFF表示未开启
mysql> show variables like "general_log%"; +------------------+---------------------------------+ | Variable_name | Value | +------------------+---------------------------------+ | general_log | OFF | | general_log_file | /var/lib/mysql/d6e04edbfb09.log | +------------------+---------------------------------+ 2 rows in set (0.00 sec)
查询日志默认是未开启的,可以修改MySQL配置文件来开启
#开启查询日志,1-开启,0-关闭 general-log=1 #设置日志的文件名,默认的文件名为host_name.log general_log_file=/var/log/mysql/general_log.log
慢查询日志
MySQL默认10s内没有响应SQL结果,则为慢查询
可以修改这个默认时间
慢查询日志默认是关闭的,修改MySQL配置文件,来开启慢查询日志
#开启慢查询日志,0-关闭,1-开启 slow_query_log=1 #指定慢查询日志的文件名 slow_query_log_file=/var/log/mysql/slow_query.log #查询超过这个时间就记录为慢查询,单位是秒 long_query_time=3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix