3.2:MySQL 日志相关参数
MySQL 有两类参数:VARIABLES(变量参数)和 STATUS(状态参数);
每类参数的生效范围均为两种:SESSION(会话)和 GLOBAL(全局);
查看参数的命令:SHOW [GLOBAL|SESSION] VARIABLES [LIKE 'variable_name'];
和SHOW [GLOBAL|SESSION] STATUS [LIKE 'status_name'];
以下查看操作均为当前会话的变量参数配置(默认的会话变量参数会继承全局变量参数,除非存在运行时修改);
3.2.1:日志存储方式
- 查看 MySQL 日志的存储方式:
MariaDB [(none)]> SHOW VARIABLES LIKE 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
默认为 FILE,即以日志文件的方式存储查询日志和慢日志;
日志存储方式分为:
- FILE:日志文件;
- TABLE:表;
- 二者可以同时存储;
3.2.2:查询日志
查询日志开启情况
- 查看查询日志开启情况:
MariaDB [(none)]> SHOW VARIABLES LIKE 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log | OFF |
+---------------+-------+
默认不开启查询日志;
查询日志文件路径
- 查看查询日志文件路径:
MariaDB [(none)]> SHOW VARIABLES LIKE 'general_log_file';
+------------------+-------------+
| Variable_name | Value |
+------------------+-------------+
| general_log_file | node103.log |
+------------------+-------------+
默认日志文件名为:server_id.log;
如果仅指定文件名,则相对路径指向的是 MySQL 的数据文件目录;
也可以指定绝对路径;
3.2.3:慢查询日志
慢查询日志开启情况
- 查看慢查询日志开启情况:
MariaDB [(none)]> SHOW VARIABLES LIKE 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | ON |
+----------------+-------+
此参数还有一种表示方式:
log_slow_queries
慢查询日志文件路径
- 查看慢日志文件路径:
MariaDB [(none)]> SHOW VARIABLES LIKE 'slow_query_log_file';
+---------------------+---------------------------------+
| Variable_name | Value |
+---------------------+---------------------------------+
| slow_query_log_file | /data/mysql_logs/mysql-slow.log |
+---------------------+---------------------------------+
为配置文件中设置的 /data/mysql_logs/mysql-slow.log;
慢查询日志记录速率限制
- 查看慢查询日志记录速率限制:
MariaDB [(none)]> SHOW VARIABLES LIKE 'log_slow_rate_limit';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| log_slow_rate_limit | 1 |
+---------------------+-------+
默认为 1;
限制慢日志记录速率的原因在于,如果数据库发生某种性能故障,导致此时很多查询操作都很慢,慢查询日志的记录频率很高,这时就没必要全都记录在慢查询日志中了;
慢查询时长定义
- 查看慢查询时长定义:
MariaDB [(none)]> SHOW VARIABLES LIKE 'long_query_time';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
查询时间查过 5s,即定义为慢查询,记录到慢查询日志中;
3.2.4:错误日志
错误日志共记录以下几类信息(不仅仅是错误信息):
-
mysql 程序运行过程中产生的错误信息;
-
mysql 程序的启动和关闭过程中输出的信息;
-
event scheduler(事件调度器)运行时产生的信息;
-
主从复制架构中,从服务器的复制线程(IO_THREAD、SQL_THREAD)启动时产生的日志;
错误日志文件路径
- 查看错误日志开启情况(错误日志文件路径):
MariaDB [(none)]> SHOW VARIABLES LIKE 'log_error';
+---------------+----------------------------------+
| Variable_name | Value |
+---------------+----------------------------------+
| log_error | /data/mysql_logs/mysql-error.log |
+---------------+----------------------------------+
定义了日志文件路径即表示开启,关闭为
OFF
;
警告信息的记录级别
警告信息也会记录在错误日志中,log_warnings 定义警告信息的记录级别;
- 查看警告信息的记录级别:
MariaDB [(none)]> SHOW VARIABLES LIKE 'log_warnings';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings | 1 |
+---------------+-------+
默认为 1;
该参数不是布尔类型,不支持{ON|OFF}类型的定义;log_warnings 值:
- 0:表示不记录警告信息;
- 1:表示记录警告信息;
- 也可以设置为大于 1,具体含义未深究;
3.2.5:二进制日志
二进制日志记录格式
- 查看当前的二进制日志记录格式:
MariaDB [(none)]> SHOW VARIABLES LIKE 'binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
默认为 STATEMENT;
二进制日志可以记录:
- STATEMENT:引起数据改变和存在引起数据改变可能性的语句;
- ROW:改变后的结果;
- MIXED:也可以二者混合。
二进制日志开启情况
- 查看当前二进制日志是否开启:
MariaDB [(none)]> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
配置文件中指定了二进制日志文件的路径,命令行中只能看到是否开启;
单个二进制日志文件的最大值
- 查看单个二进制日志文件的最大值:
MariaDB [(none)]> SHOW VARIABLES LIKE 'max_binlog_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+
默认 1G,达到这个值会自然滚动;
某些操作会导致二进制日志文件强制滚动,比如 flush logs,mysql 重新启动等;
二进制日志刷写机制
- 查看当前二进制日志的刷写机制:
MariaDB [(none)]> SHOW VARIABLES LIKE 'sync_binlog';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog | 0 |
+---------------+-------+
默认为 0;
该参数是数值型:
- 0:表示 MySQL 本身不控制 binlog 的刷写,由内核自己控制从 log buffer 到 log file 的刷写;
- 1:表示 1 次事务刷写 1次;
- n:表示 n 次事务刷写 1次;
设置为 0 的性能高,但不可靠;
设置为 1 最可靠,但性能损耗较大;
应该根据业务和系统负载情况选择一个合理的值,综合考虑数据一致性和性能;
二进制日志文件列表
- 查看当前已有的二进制日志文件列表:
MariaDB [(none)]> SHOW MASTER LOGS;
+---------------------+-----------+
| Log_name | File_size |
+---------------------+-----------+
| mysql-binlog.000001 | 30361 |
| mysql-binlog.000002 | 1038814 |
| mysql-binlog.000003 | 1853 |
| mysql-binlog.000004 | 245 |
+---------------------+-----------+
MariaDB [(none)]> SHOW BINARY LOGS;
+---------------------+-----------+
| Log_name | File_size |
+---------------------+-----------+
| mysql-binlog.000001 | 30361 |
| mysql-binlog.000002 | 1038814 |
| mysql-binlog.000003 | 1853 |
| mysql-binlog.000004 | 245 |
+---------------------+-----------+
正在使用的二进制日志文件
- 查看当前正在使用的二进制日志文件:
MariaDB [(none)]> SHOW MASTER STATUS;
+---------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| mysql-binlog.000004 | 245 | | |
+---------------------+----------+--------------+------------------+
File 为当前正在使用的二进制日志文件;
Position 为最近一次事件的结束位置(Position 是以字节为单位的偏移量,记录每个事件的位置);
Binlog_Do_DB 和 Binlog_Ignore_DB 是 “复制过滤器” 相关的参数,后续实验过程会提及;
查看二进制日志中的事件
- 查看 mysql-binlog.000003 中起始位置为 1483 的事件(操作):
MariaDB [(none)]> SHOW BINLOG EVENTS IN 'mysql-binlog.000003' FROM 1483 LIMIT 1;
+---------------------+------+------------+-----------+-------------+---------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------------+------+------------+-----------+-------------+---------------------------+
| mysql-binlog.000003 | 1483 | Query | 103 | 1576 | CREATE DATABASE sample_db |
+---------------------+------+------------+-----------+-------------+---------------------------+
mysqlbinlog 命令
mysqlbinlog 命令是专用于查看 binlog 的:
- 使用 mysqlbinlog 查看和上面相同的事件:
[root@node103 ~]# mysqlbinlog /data/mysql_logs/mysql-binlog.000003 -j 1483 --stop-position=1576
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#201125 9:59:09 server id 103 end_log_pos 245 Start: binlog v 4, server v 5.5.68-MariaDB created 201125 9:59:09 at startup
ROLLBACK/*!*/;
BINLOG '
bbq9Xw9nAAAA8QAAAPUAAAAAAAQANS41LjY4LU1hcmlhREIAbG9nAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABtur1fEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAMYjJEw==
'/*!*/;
# at 1483
#201125 10:17:49 server id 103 end_log_pos 1576 Query thread_id=10 exec_time=0 error_code=0
SET TIMESTAMP=1606270669/*!*/;
SET @@session.pseudo_thread_id=10/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
CREATE DATABASE sample_db
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
mysqlbinlog 的常用选项:
–start-datetime=“YYYY-MM-DD hh:mm:ss”
指定要查看的起始时间点;–stop-datetime=“YYYY-MM-DD hh:mm:ss”
指定要查看的结束时间点;-j, --start-position=INT
指定要查看的起始位置;–stop-position=INT
指定要查看的起始位置;
3.2.6:中继日志
- 查看中继日志开启情况(中继日志文件路径):
MariaDB [(none)]> SHOW VARIABLES LIKE 'relay_log';
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| relay_log | /data/mysql_logs/mysql-relay |
+---------------+------------------------------+
为配置文件中设置的路径;设置了路径即表示开启中继日志;
中继日志主要用于主从复制架构中,在从服务器上开启中继日志,记录主服务器的二进制日志文件同步过来的事件。
3.2.7:事务日志
相关查询操作已包含在《MySQL 存储引擎相关参数》 - InnDB 事务日志中。