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
posted @   青橙e  阅读(720)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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
点击右上角即可分享
微信分享提示