ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL的四种日志

2021-10-19 03:00:36  阅读:198  来源: 互联网

标签:bin binlog log MySQL 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

标签:bin,binlog,log,MySQL,mysql,日志,四种
来源: https://www.cnblogs.com/cyan-orange/p/15423127.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有