MariaDB—— 16. 日志

Mysql中,日志可以按照功能分为:
错误日志
查询日志
慢查询日志
二进制日志
中继日志
innodb存储引擎级别的事务日志

1. 错误日志

错误日志中记录了mysql执行过程中的错误信息,但是其不仅仅记录了执行过程中的错误信息,还会记录其他信息,错误日志会记录如下信息:
mysql执行过程中的错误信息
mysql执行过程中的警告信息
event scheduler运行时所产生的信息
mysql启动和停止过程中的输出信息,未必是错误信息
主从复制结构中,从服务器IO复制线程的启动信息
mysql中,错误日志使用log_error以及log_warnings等参数进行定义。
log_warnings用于标识警告信息是否一并记录到错误日志中。
log_warnings的值为0,表示不记录警告信息。
log_warnings的值为1,表示警告信息一并记录到错误日志中。
log_warnings的值大于1,表示"失败的连接"的信息和创建新连接时"拒绝访问"类的错误信息也会被记录到错误日志中。

mysql> show variables like '%log_error%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_error     |       |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%log_warning%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings  | 2     |
+---------------+-------+
1 row in set (0.00 sec)
2. 查询日志

查询日志在mysql中被称之为general log(通用日志),不要被"查询日志"的名字误导,错误的以为查询日志只会记录select语句,其实不然,查询日志记录了数据库执行的命令,不管这些 语句是否正确,都会被记录,当开启了查询日志以后,数据库可能需要不停的写入查询日志,这样会 增大服务器的IO压力,增加很多系统开销,所以默认情况下,mysql的查询日志是没有开启的,但是开启查询日志也有助于分析哪些语句执行密集,执行 密集的select语句对应的数据是否能够被缓存,查询日志也可以帮助分析问题,所以,可以根据实际情况决定是否开启查询日志,如果需要可以手动 开启。如果开启了查询日志,那么可以通过如下3种方式存储查询日志。
方式1:将查询日志存放于指定的日志文件中。
方式2:将查询日志存放于mysql.general_log表中。
方式3:将查询日志同时存放于指定的日志文件与mysql库的general_log表中。

mysql> show variables where variable_name like "%general_log%" or variable_name="log_output";
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| general_log      | OFF        |
| general_log_file | master.log |
| log_output       | FILE       |
+------------------+------------+
3 rows in set (0.00 sec)

log_output可以设置为4种 值,“FILE”、“TABLE”、“FILE,TABLE”、“NONE”。此值为"FILE"表示存放于指定的文件中,此值为"TABLE"表示存放 于mysql库的general_log表中,此值为"FILE,TABLE"表示将查询日志同时存放于指定的文件与general_log表中,一般不 会进行这样的设置,因为这样会徒增很多IO压力,如果开启,建议设置为"table",此值为"NONE"时表示不记录查询日志,即使 general_log设置为ON,如果log_output设置为NONE,也不会记录查询日志,其实,log_output不止用户控制查询日志的输 出,慢查询日志的输出也是由此参数进行控制,也就是说,log_output设置为file,就表示查询日志和慢查询日志都存放到对应的文件中,设置为 table,查询日志和慢查询日志就都存放在对应的数据库表中。
general_log_file:表示当log_output的值设置为"FILE"或者"FILE,TABLE"时,将查询日志存放于哪个日志 文件中,换句话说,就是通过此参数指定查询日志的文件,默认情况下,此文件名于主机名相同,而且使用了相对路径,默认位置为datadir变量所对应的目 录位置,一般为/var/lib/mysql目录下。

mysql> show variables where variable_name like "%general_log%" or variable_name="log_output";
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| general_log      | OFF        |
| general_log_file | master.log |
| log_output       | FILE       |
+------------------+------------+
3 rows in set (0.00 sec)

mysql> set global general_log=on;
Query OK, 0 rows affected (0.00 sec)
 
mysql> set global log_output='FILE,TABLE'
    -> ;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables where variable_name like "%general_log%" or variable_name="log_output";
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| general_log      | ON         |
| general_log_file | master.log |
| log_output       | FILE,TABLE |
+------------------+------------+
3 rows in set (0.01 sec)
[root@master ~]# cat /var/lib/mysql/master.log 
/usr/sbin/mysqld, Version: 10.2.31-MariaDB (MariaDB Server). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
200328 22:55:13	   20 Query	set global log_output=FILE,TABLE
200328 22:55:23	   20 Query	set global log_output='FILE,TABLE'
200328 22:55:57	   20 Query	show variables where variable_name like "%general_log%" or variable_name="log_output"
200328 22:56:37	   19 Quit	
mysql> select * from mysql.general_log \G;
*************************** 1. row ***************************
  event_time: 2020-03-28 22:55:57.029412
   user_host: root[root] @ node1 [192.168.1.72]
   thread_id: 20
   server_id: 1
..............
3. 二进制日志

二进制日志为binlog,它记录了所有修改了数据库的语句,或者有可能会改变数据库的语句,select、show类不修改数据库的操作,二进制日志是不会进行记录的,二进制日志主要用于时间点恢复(备份恢复),以及主从复制结构。
binlog记录了所有的修改了数据库的语句,那么,来想一个问题,假设,在执行某 条修改数据库的语句时,用到了user()函数,那么当执行这条语句时,语句根据当前用户的信息修改了数据库,然后这条语句将被记录到binlog 中,但是,语句被记录在binlog中时,并没有记录当前用户的信息,而是记录了"user()“这个函数本身的几个字符,当根据binlog再次重 放这条语句时,如果重放这条语句的用户与这条语句被记录时所使用的用户不同,那么语句执行后的结果就不同,这样就导致根据binlog重放操作时,并不能 得到与预想的完全一致的数据,这种情况在数据恢复时是不允许的,在主从复制时也不是期望看到的,所以,为了能够完全的还原日志被记录时的操作,我 们应该记录对应语句到底修改了哪些行,并且记录对应语句对这些行进行了哪些修改,只有这样,才能保证在重放binlog时,执行的操作与记录日志时的 操作是完全一致的,这样是安全了,但是,设想一下,如果执行了一条update语句,这条update语句涉及到10000行数据的修改,那么, 就需要将这条sql涉及到的10000行数据修改都记录到binlog中,以便重放二进制日志时,能够还原当时的操作,这样与只记录一条update 语句来说,记录的信息量就大的多了,这样想想,这两种记录方式还是各有优势的。当然,到底是让binlog以记录语句的模式进行记录,还是以记录数据修改 的模式进行记录,这些都是数据库管理员可以决定的,可以设置mysql通过哪种模式记录binlog,mysql中,有三种模 式,statement、row、mixed,来总结一下binlog的这三种记录模式。
二进制日志有3种记录方式,三种方式:
statement模式:记录对数据库做出修改的语句,比如,update A set test=‘test’,如果使用statement模式,那么这条update语句将会被记录到二进制日志中,使用statement模式时,优点是 binlog日志量少,IO压力小,性能较高,缺点是为了能够尽量的完全一致的还原操作,除了记录语句本身以外,可能还需要记录一些相关的信息,而且,在 使用一些特定的函数时,并不能保证恢复操作与记录时完全一致。
row模式:记录对数据库做出修改的语句所影响到的数据行以及这些行的修改,比如,update A set test=‘test’,如果使用row模式,那么这条update语句所影响到的行所对应的修改,将会记录到binlog中,比如,A表中有1000条 数据,那么当执行这条update语句以后,由于1000条数据都会被修改,所以会有1000行数据被记录到二进制日志中,以及它们是怎样被修改的,使用 row模式时,优点是能够完全的还原或者复制日志被记录时的操作,缺点是记录日志量较大,IO压力大,性能消耗较大。
mixed模式:混合使用上述两种模式,一般的语句使用statment方式进行保存,如果遇到一些特殊的函数,则使用row模式进行记录,这种记录方式被称之为mixed,看上去这种方式似乎比较美好,但是在生产环境中,为了保险起见,一般会使用row模式。
使用binlog_format变量设置二进制日志的记录方式,为了使配置永久生效,可以在my.cnf配置文件中加入配置。
binlog_format=row
二进制日志文件, 有"事件"和"位置"的概念,什么是事件呢?通俗的讲,可以把binlog中的每一条记录当做一个"事件”,因为binlog记录了所有对数据库进行 的修改,所以,可以认为,数据库的修改被记录到二进制日志中,记录每一条都可以理解为一个"事件",由于二进制日志文件是二进制的,所以,可 以把整个二进制文件想象成一个字节序列,假设,二进制日志文件刚开始是空的,从第1个字节开始记录,假设记录第一个"事件"(第一条记录),需要15个字 节,那么第一个事件的开始"位置"就是1,结束"位置"就是15,由于前15个字节已经被第一个事件占用,那么当想要通过二进制日志记录第二个事件 时,则需要从第15个字节向后开始记录,假设记录第二个"事件"需要20个字节,那么第二个事件在binlog中的起始"位置"就是15,结束"位置"就 是35,以此类推,这就是二进制日志中,"事件"与"位置"的概念,"事件"被称为events,"位置"被称为position。
二进制日志相关参数

 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    |
+---------------------------------+-------+

log_bin : 此变量用于控制是否开启二进制日志,只读变量,只能在my.cnf中配置,不能使用set配置,配置该变量包括两个操作,启动二进制日志和设置二进制日志的文件名,设置log_bin的值为mybinlog,那么,在mysql的数据目录中,将会自动生成一个以mybinlog为文件名前缀的二进 制日志文件,禁用binlog,需将log_bin这一行配置从my.cnf文件中注释或其删除,重启mysql服务,再次 查看log_bin的值,其值为OFF,不要直接在my.cnf文件中将log_bin的值设置为ON或者OFF,如果这样做,你将会看到以ON或 者OFF为文件名前缀的二进制日志文件,二进制日志文件的后缀 名会进行自动编号,每次日志滚动后,后缀名编号自动加1。
sql_log_bin :用于标识当前会话中的操作是否会被记录于二进制日志,此变量值设置为ON,则表示在当前数据库连接中,对数据库进行修改的语句将会被记录到 binlog中,此变量值设置为OFF,则表示在当前数据库连接中,对数据库进行的修改的语句将不会被记录到binlog中,在主从复制结构中,这些语句 由于没有被binlog记录,所以也不会同步到从节点中。换句话说,即使在my.cnf配置文件中设置了log_bin的值,当前会话中,如果 sql_log_bin的值设置为OFF,当前会话的操作也不会记录在二进制日志中。sql_log_bin是一个会话界别的变量,只 能在当前会话中使用set sql_log_bin命令进行设置,不能使用set global sql_log_bin命令进行设置,因为它是会话级别的变量,sql_log_bin也不能配置在my.cnf文件中,可能会无法启动 mysql。
binlog_format : 二进制日志的记录方式,此变量的值可以设置为statement、row、mixed,分别表示以语句的 形式记录二进制日志,以数据修改的形式记录二进制日志,以混合的方式记录二进制日志,安全保险起见,推荐使用row的方式记录。
max_binlog_size :设置单个二进制日志文件的最大大小,以字节为单位,超过此值大小,则二进制日志文件会自动滚动,比如设置为500M为524288000。
sync_binlog :将sync_binlog为1,每次事务提交之后,会立即将内存中的二进制日志立即同步到磁盘中的二进制日志文件中,值为0时,一旦操作系统宕机,那么将丢失未从内存中同步到磁盘中的binlog,值为0时,安全性最差,但性能最高,值为1,安全性最高,性能最差,除了设置为0或1,还能设置为N,示每N次事务提交后,将binlog从内存刷写到磁盘一次,值越大,有可能丢失的日志数据将会越多,当然,性能会越好,在追求安全的情况下,推荐设 置为1,但是听说,此值设置为0和设置为1时在性能上的差距还是比较明显的,如果设置为0或N,最好为操作系统准备带有备用电源的缓存。

 [root@master ~]# vim /etc/my.cnf
 [mysqld]
log_bin=mysql_log;
binlog_format=row
 [root@master ~]# systemctl restart mariadb
[root@master ~]# mysql -uroot -p 
MariaDB [(none)]> show binary logs;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| mysql_log;.000001 |       329 |
+-------------------+-----------+

MariaDB [(none)]> show master logs;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| mysql_log;.000001 |       329 |
+-------------------+-----------+
1 row in set (0.00 sec)
MariaDB [(none)]> show binlog events;
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| Log_name          | Pos | Event_type        | Server_id | End_log_pos | Info                                           |
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| mysql_log;.000001 |   4 | Format_desc       |         1 |         256 | Server ver: 10.2.31-MariaDB-log, Binlog ver: 4 |
| mysql_log;.000001 | 256 | Gtid_list         |         1 |         285 | []                                             |
| mysql_log;.000001 | 285 | Binlog_checkpoint |         1 |         329 | mysql_log;.000001                              |
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
3 rows in set (0.00 sec)
MariaDB [(none)]> show binlog events in 'mysql_log;.000001';
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| Log_name          | Pos | Event_type        | Server_id | End_log_pos | Info                                           |
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| mysql_log;.000001 |   4 | Format_desc       |         1 |         256 | Server ver: 10.2.31-MariaDB-log, Binlog ver: 4 |
| mysql_log;.000001 | 256 | Gtid_list         |         1 |         285 | []                                             |
| mysql_log;.000001 | 285 | Binlog_checkpoint |         1 |         329 | mysql_log;.000001                              |
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
3 rows in set (0.00 sec)
MariaDB [(none)]> show binlog events in 'mysql_log;.000001' from 4;
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| Log_name          | Pos | Event_type        | Server_id | End_log_pos | Info                                           |
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| mysql_log;.000001 |   4 | Format_desc       |         1 |         256 | Server ver: 10.2.31-MariaDB-log, Binlog ver: 4 |
| mysql_log;.000001 | 256 | Gtid_list         |         1 |         285 | []                                             |
| mysql_log;.000001 | 285 | Binlog_checkpoint |         1 |         329 | mysql_log;.000001                              |
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
3 rows in set (0.00 sec)
MariaDB [(none)]> show binlog events in 'mysql_log;.000001' from 256;
+-------------------+-----+-------------------+-----------+-------------+-------------------+
| Log_name          | Pos | Event_type        | Server_id | End_log_pos | Info              |
+-------------------+-----+-------------------+-----------+-------------+-------------------+
| mysql_log;.000001 | 256 | Gtid_list         |         1 |         285 | []                |
| mysql_log;.000001 | 285 | Binlog_checkpoint |         1 |         329 | mysql_log;.000001 |
+-------------------+-----+-------------------+-----------+-------------+-------------------+
2 rows in set (0.00 sec)
MariaDB [(none)]> show binlog events in 'mysql_log;.000001' limit 2;
+-------------------+-----+-------------+-----------+-------------+------------------------------------------------+
| Log_name          | Pos | Event_type  | Server_id | End_log_pos | Info                                           |
+-------------------+-----+-------------+-----------+-------------+------------------------------------------------+
| mysql_log;.000001 |   4 | Format_desc |         1 |         256 | Server ver: 10.2.31-MariaDB-log, Binlog ver: 4 |
| mysql_log;.000001 | 256 | Gtid_list   |         1 |         285 | []                                             |
+-------------------+-----+-------------+-----------+-------------+------------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [(none)]> show binlog events in 'mysql_log;.000001' limit 1, 2;
+-------------------+-----+-------------------+-----------+-------------+-------------------+
| Log_name          | Pos | Event_type        | Server_id | End_log_pos | Info              |
+-------------------+-----+-------------------+-----------+-------------+-------------------+
| mysql_log;.000001 | 256 | Gtid_list         |         1 |         285 | []                |
| mysql_log;.000001 | 285 | Binlog_checkpoint |         1 |         329 | mysql_log;.000001 |
+-------------------+-----+-------------------+-----------+-------------+-------------------+
2 rows in set (0.00 sec)

显示当前log记录在哪个位置上

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysql_log;.000001 |      329 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

手动切换,使下一个日志文件

MariaDB [(none)]> flush logs;
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysql_log;.000002 |      373 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
记录所使用的日志文件
[root@master mysql]# pwd
/var/lib/mysql
[root@master mysql]# cat mysql_log\;.index 
./mysql_log;.000001
./mysql_log;.000002
4. mysqlbinlog

查看对应的二进制日志

[root@master mysql]# mysqlbinlog mysql_log\;.000001 
/*!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
#200329  8:53:27 server id 1  end_log_pos 256 CRC32 0x7b7c8e5a 	Start: binlog v 4, server v 10.2.31-MariaDB-log created 200329  8:53:27 at startup
ROLLBACK/*!*/;
BINLOG '
h/F/Xg8BAAAA/AAAAAABAAAAAAQAMTAuMi4zMS1NYXJpYURCLWxvZwAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACH8X9eEzgNAAgAEgAEBAQEEgAA5AAEGggAAAAICAgCAAAACgoKAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAEEwQADQgICAoKCgFajnx7
'/*!*/;
# at 256
#200329  8:53:27 server id 1  end_log_pos 285 CRC32 0x3e483b8a 	Gtid list []
# at 285
#200329  8:53:27 server id 1  end_log_pos 329 CRC32 0x7c2959c0 	Binlog checkpoint mysql_log;.000001
# at 329
#200329  9:01:57 server id 1  end_log_pos 377 CRC32 0x61d6bfef 	Rotate to mysql_log;.000002  pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
[root@master mysql]# mysqlbinlog mysql_log\;.000001 --start-position 4
[root@master mysql]#mysqlbinlog --start-position 317 --stop-position 442 mybinlog.000001
[root@master mysql]#mysqlbinlog --start-datetime "2017-3-4 10:40:00" mybinlog.000001;
[root@master mysql]#mysqlbinlog --start-datetime "2017-3-4 10:40:00" --stop-datetime "2017-3-4 10:55:00" mybinlog.000001;
5. 慢查询日志
MariaDB [(none)]> show variables like '%slow_query%';
+---------------------+-----------------+
| Variable_name       | Value           |
+---------------------+-----------------+
| slow_query_log      | OFF             |
| slow_query_log_file | master-slow.log |
+---------------------+-----------------+
2 rows in set (0.00 sec)

某些sql语句执行完毕所花费的时间特别长,将这种响应比较慢的语句记录在慢查询日志中,不要被"慢查询日志"的名字误导,错误的以为慢查询日 志只会记录执行比较慢的SELECT语句,其实不然,INSERT、DELETE、UPDATE、CALL等DML操作,只要是超过了指定的时间,都可以 称之为"慢查询",被记录在慢查询日志中。聪明如你一定已经想到了,“慢查询日志"与"查询日志"的理念很像。默认情况下,慢查询日志是不被开启的,如果 需要,可以手动开启,开启慢查询日志之后,默认设置下,执行超过10秒的语句才会被记录到慢查询日志中,当然,对于"慢"的定义,可以自定义。
log_slow_queries :表示是否开启慢查询日志,5.6以前的版本使用此参数指定是否 开启慢查询日志,5.6以后的版本使用slow_query_log取代此参数,如果你使用的mysql版本刚好是5.5,那么你可以看到这两个参数同时 存在,此时不用同时设置它们,设置这两个参数中的任何一个,另一个也会自动保持一致。
log_output : 表示当慢查询日志开启以后,以哪种方式存放,log_output可以设置为4种 值,“FILE”、“TABLE”、“FILE,TABLE”、“NONE”。此值为"FILE"表示慢查询日志存放于指定的文件中,此值 为"TABLE"表示慢查询日志存放于mysql库的slow_log表中,此值为"FILE,TABLE"表示将慢查询日志同时存放于指定的文件与 slow_log表中,一般不会进行这样的设置,因为这样会徒增很多IO压力,如果开启,建议设置为"table”,此值为"NONE"时表示不记录查询 日志,即使slow_query_log设置为ON,如果log_output设置为NONE,也不会记录慢查询日志,其实,log_output不止用 于控制慢查询日志的输出,查询日志的输出也是由此参数进行控制,也就是说,log_output设置为file,就表示查询日志和慢查询日志都存放到对应 的文件中,设置为table,查询日志和慢查询日志就都存放在对应的数据库表中。
slow_query_log :表示是否开启慢查询日志,此参数与log_slow_queries的作用没有区别,5.6以后的版本使用此参数替代log_slow_queries。
slow_query_log_file :当使用文件存储慢查询日志时(log_output设置 为"FILE"或者"FILE,TABLE"时),指定慢查询日志存储于哪个日志文件中,默认的慢查询日志文件名为"主机名-slow.log",慢查询 日志的位置为datadir参数所对应的目录位置,一般情况下为 /var/lib/mysql
long_query_time :表示"多长时间的查询"被认定为"慢查询",此值得默认值为10秒,表示超过10秒的查询被认定为慢查询。
log_queries_not_using_indexes :表示如果运行的sql语句没有使用到索引,是否也被当做慢查询语句记录到慢查询日志中,OFF表示不记录,ON表示记录。
log_throttle_queries_not_using_indexes :5.6.5版本新引入的参数,当log_queries_not_using_inde设置为ON时,没有使用索引的查询语句也会被当做慢查询语句记录 到慢查询日志中,使用log_throttle_queries_not_using_indexes可以限制这种语句每分钟记录到慢查询日志中的次数, 因为在生产环境中,有可能有很多没有使用索引的语句,此类语句频繁的被记录到慢查询日志中,可能会导致慢查询日志快速不断的增长,管理员可以通过此参数进 行控制。

MariaDB [(none)]> set global slow_query_log=on;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> select @@global.long_query_time;
+--------------------------+
| @@global.long_query_time |
+--------------------------+
|                10.000000 |
+--------------------------+
1 row in set (0.01 sec)
MariaDB [(none)]> set global long_query_time=3;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select @@long_query_time;
+-------------------+
| @@long_query_time |
+-------------------+
|          3.000000 |
+-------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> show variables where variable_name like '%slow_query%' or variable_name='log_output';
+---------------------+-----------------+
| Variable_name       | Value           |
+---------------------+-----------------+
| log_output          | FILE            |
| slow_query_log      | ON              |
| slow_query_log_file | master-slow.log |
+---------------------+-----------------+

显示共有多少条慢查询
MariaDB [(none)]> show global status like ‘%slow_queries%’;

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 1     |
+---------------+-------+
1 row in set (0.00 sec)
6. mysqldumpslow

mysqldumpslow命令从不同的维度对 慢日志进行排序、查找、统计。但是mysqldumpslow只能作用于慢查询日志文件,不统计slow_log表,将log_output的值设置为"FILE"或 者"FILE,TABLE"时,可以通过mysqldumpslow查看对应的慢查询日志文件。
-s选项代表排序,-s选项后添加的参数:
c: 执行计数
l: 锁定时间
r: 返回记录
t: 执行时间
al:平均锁定时间
ar:平均返回记录数
at:平均执行时间

在这里插入图片描述
根据统计数量进行排序
在这里插入图片描述
根据记录数进行排序
在这里插入图片描述
指定显示的记录条数
在这里插入图片描述
指定正则
在这里插入图片描述

————Blueicex 2020/3/29 09:30 blueice1980@126.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值