day06-02-日志管理
日志参数
错误日志:
--log-error=/path/file_name.log.err
常规日志:
--general_log=/path/file_name.log
慢查询:(程序:mysqldumpslow)
--slow_query_log = /path/file_name-slow.log
--long_query_time = /path/file_name-slow.log
二进制日志(程序:mysqlbinlog)
--log-bin=/path/file_name-bin.000001
--expire-log-days = 7 (days)
审计
--audit_log = /path/file_name-audit.log
--audit_log_file
生产环境重点关注:
错误日志: --log-erro
慢查询:--slow_query_log --long_query_time
二进制:--bin-log --expire-logs-days
1.错误日志
1.1作用
排查mysql运行过程的故障。
1.2配置
默认开启
默认路径和名字
--datadir= /path/hostname.err
内容关键字:grep -e '\[ERROR\]' /path/file_name.log.err
1.3人为定制位置
select @@log_error;
vi my.cnf
[mysqld]
log_error = /path/file_name.err
2.二进制日志(binlog)(非常重要)
2.1 作用
(1)主从要依赖二进制日志
(2)数据恢复时需要依赖于二进制日志
(3) binlog是SQL层的逻辑日志,主要是记录数据行的变化或者语句本身
2.2如何配置
默认不开启(5.7必须加server_id)
server_id = [1-65535]
log_bin = 1 # 打开二进制开关,日志存放于data指定目录
log_bin = /path/binlog/mysql-bin #一般使用这个配置,指定具体位置及文件名
binlog_format = row #5.7 版本以后,默认就是row
sync_binlog = 1
注意:MySQL8.0之前,默认是没有开启二进制日志的。
基础参数查看:
开关:
[(none)]>select @@log_bin;
日志路径及名字
[(none)]>select @@log_bin_basename;
服务ID号:
[(none)]>select @@server_id;
二进制日志格式:
[(none)]>select @@binlog_format;
双一标准之二:
[(none)]>select @@sync_binlog;
双“一”标准之二(非常非常重要)
sync_binlog =1
作用:每次事务提交,都立即刷写到binlog到磁盘。
即每次提交MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘
2.3 二进制日志记录了是么?
2.3.1概括
记录数据库所有变更类的操作日志,且一定是commit 提交成功的事务
DDL,DCL,DML
2.3.2 DDL 和 DCL
已语句的方式,原模原样的记录
2.3.3 DML
(1)记录已提交的事务
记录SQL语句种类
DDL:原封不动的记录当前DDL(statement语句方式)。
DCL:原封不动的记录当前DCL(statement语句方式)。
DML:只记录已经提交的事务DML(insert,update,delete)
(2)DML记录格式(statement,row,mixd)
通过binlot_format=row 参数控制,这个参数只能控制DML语句。 DDL/DCL 一点作用都没有,仍然以语句的方式记录。
说明:
statement(5.6默认)SBR(statement based replication),SBR: 语句模式,语句模式记录SQL,做什么就记录说明。
ROW(5.7默认值)RBR(ROW based replication): RBR,行模式,记录数据行的变化。比如:update set 1=2 ,记录数据如何改变,逻辑层面的。(redo 记录的是数据页变化,别搞混了)
mixed(混合)MBR(mixed based replication)模式,有mysql自己决定,不可控。
面试题:
SBR 和 RBR 说明区别? 怎么选择?
SBR:可读性较强,对于范围操作,日质量少。但是可能会出现记录不准确。
update t1 set name='zs' where id>5;
id大于5的数据行改变,SBR模式只记录这一条语句。
缺点:
比如:insert into t1 values(1,'zs',now()); now()会记录当时业务发生时的时间点,如果做数据恢复的话,这个now()就会获得现在的时间点
RBR:可读性强,对于范围操作日志量大,不会出现记录错误。
在一些高可用环境或某些架构中,新特性要依赖于RBR模式,必须使用。
公司业务对数据严谨性高,所以会选择RBR
SBR 和 RBR 说明区别? 怎么选择?
比如现在进行update 100行数据的更新操作,where id>1000;
RBR记录每一行数据的变化。
SBR只记录一条执行语句。
怎么选择?
SBR 可能会记录错误的日志,日志记录会有偏差,时间函数举例。
2.4 二进制日志记录单元
2.4.1 event 事件
二进制日志中,最小记录单元是 事件 event。
DDL:create database db_name;
对于DDL等语句,每个语句就是一个事件。
DML:一个事务包含多个语句
begin: 事件1
a 事件2
b 事件3
commit; 事件4
2.4.2 event 事件的开始和结束
作用:方便从日志截取想要的日志事件
2.5二进制日志的管理
2.5.1查看二进制日志位置
show variables like '%log_bin%';
root@localhost 10:48:55->show variables like '%log_bin%';
+---------------------------------+------------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------------+
| log_bin | ON |
| log_bin_basename | /data/mysql/binlog/mysql-bin |
| log_bin_index | /data/mysql/binlog/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.01 sec)
root@localhost 10:49:00->
2.5.2 查看所有已存在的二进制日志
show binary logs;
flush logs;
2.5.3 查看正在使用的二进制日志
show master status;
2.5.4 查看二进制日志事件
先查看当前使用是哪个 binlog文件
root@localhost 10:57:31->show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 328 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
root@localhost 10:58:57->
然后查看事件内容:
show binlog events in 'mysql-bin.000002';
show binlog events in 'mysql-bin.000002' limit 5;
root@localhost 10:58:58->show binlog events in 'mysql-bin.000002';
+------------------+-----+----------------+-----------+-------------+-------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+-------------------------------------------+
| mysql-bin.000002 | 4 | Format_desc | 3306 | 123 | Server ver: 5.7.26-log, Binlog ver: 4 |
| mysql-bin.000002 | 123 | Previous_gtids | 3306 | 154 | |
| mysql-bin.000002 | 154 | Anonymous_Gtid | 3306 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000002 | 219 | Query | 3306 | 328 | use `simon_test`; create table t1(id int) |
+------------------+-----+----------------+-----------+-------------+-------------------------------------------+
4 rows in set (0.00 sec)
root@localhost 10:59:19->
内容解析:
前两行是二进制文件的“头”格式
POS:事件起始号码
End_log_pos:事件结束号码
截取事务,一定是从begin到commit,这才是一个完整的事务。
2.5.5 查看二进制日志内容
[root@mysql-node01 binlog]# mysqlbinlog --base64-output=decode-rows -vvv ./mysql-bin.000002
--base64-output=decode-rows #转码翻译,方便阅读
-vvv #详细信息
[root@mysql-node01 binlog]# mysqlbinlog -d db_name #查看指定数据库
插入几行数据:
mysql -e 'insert into simon_test.t1 values(1),(2),(3);commit;'
查看内容
mysqlbinlog --base64-output=decode-rows -vvv #这个转码翻译后的内容只是为了方便阅读,并不能做日志恢复
[root@mysql-node01 binlog]# pwd
/data/mysql/binlog
[root@mysql-node01 binlog]# mysqlbinlog --base64-output=decode-rows -vvv ./mysql-bin.000002
......
# at 1443
#201015 11:32:32 server id 3306 end_log_pos 1571 CRC32 0x6a53905e Query thread_id=15 exec_time=0 error_code=0
use `simon_test`/*!*/;
alter table t1 add column name varchar(10)
/*!*/;
# at 1636
#201015 11:33:17 server id 3306 end_log_pos 1714 CRC32 0x0b0da816 Query thread_id=15 exec_time=0 error_code=0
SET TIMESTAMP=1602732797/*!*/;
BEGIN
/*!*/;
# at 1714
#201015 11:33:17 server id 3306 end_log_pos 1768 CRC32 0x67dbf12c Table_map: `simon_test`.`t1` mapped to number 118
# at 1768
#201015 11:33:17 server id 3306 end_log_pos 1819 CRC32 0xf6edf875 Write_rows: table id 118 flags: STMT_END_F
### INSERT INTO `simon_test`.`t1`
### SET
### @1=4 /* INT meta=0 nullable=1 is_null=0 */
### @2='aa' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */
### INSERT INTO `simon_test`.`t1`
### SET
### @1=5 /* INT meta=0 nullable=1 is_null=0 */
### @2='bb' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */
# at 1819
#201015 11:33:19 server id 3306 end_log_pos 1850 CRC32 0xb2c40913 Xid = 137
COMMIT/*!*/;
......
[root@mysql-node01 binlog]#
内容解释:
### INSERT INTO `simon_test`.`t1` #插入操作
### SET #set 等同于 values
### @1=4 /* INT meta=0 nullable=1 is_null=0 */
### @2='aa' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */
### INSERT INTO `simon_test`.`t1`
### SET
### @1=5 /* INT meta=0 nullable=1 is_null=0 */
### @2='bb' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */
@1=4 表示,在表的第一个列,插入值"4",INT 是数据类型,is_null 表示:该字段允许为空
@2='aa' 表示,在表的第二个列,插入值"aa",VARSTRING(40) 字段数据类型以及最大预留长度
2.5.6 截取二进制日志
mysqlbinlog
--start-position=[start pos]
--stop-position=[end pos]
[root@mysql-node01 binlog]# mysqlbinlog --start-position=1178 --stop-position=1347 ./mysql-bin.00000
截取后的文件,可以直接用做数据恢复。
start position / stop position 实际上就是表示,这个事件内容,占了文件的第n个字节 到 第n字节之间
2.5.7 通过binlog恢复数据
mysql> show master status; #确实当前使用哪个binlog文件
mysql> show binlog events in 'mysql-bin.xxxxxx'; #查看事件,查找start pos 和 end pos
mysql> mysqlbinlog --start-position=xxx --stop-position=xxx ./mysql-bin.xxxxxx > /tmp/bak.sql #截取日志并导出到sql文件
查看当前会话,sql_bin_log 开启状态
root@localhost 12:06:35->show variables like '%sql_log_bin%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
root@localhost 12:06:44->
在当前会话窗口,临时关闭二进制日志(恢复过程中,产生的二进制记录,是不需要再次记录到二进制日志中)
root@localhost 12:06:46->set sql_log_bin=0;
mysql> source /tmp/bak.sql #恢复
mysql> set sql_bin_log=1; #再开启当前会话的binlog记录
2.6 binlog 的gtid记录模式的管理
2.6.1GITD 介绍
GTID:全局事务编号
对于binlog中的每一个事务,都会生成一个GTID号码
DDL,DCL一个event就是一个事务,就会有一个GTID号
DML 语句来讲,begin到commit,就是一个事务,就是一个GTID号
2.6.2 GTID的组成
server_uuid: TID
server_uuid 是怎么生成的?
数据库初始化完成,第一次启动的时候,就会自动生成
默认存储在--datadir=/data_path/
[root@mysql-node01 data]# pwd
/data/mysql/data
[root@mysql-node01 data]# ll auto.cnf
-rw-r----- 1 mysql mysql 56 Oct 9 21:22 auto.cnf
[root@mysql-node01 data]#
[root@mysql-node01 data]# cat auto.cnf
[auto]
server-uuid=7a995d76-0a32-11eb-9c4a-525400c58226
[root@mysql-node01 data]
TID 是一个自增长数字,从1开始
7a995d76-0a32-11eb-9c4a-525400c58226:1-15 #大概就是这个样子,1-15表示当前数据已经运行1-15个事务
2.6.3 GTID的幂等性
如果拿有GTID的日志去恢复时,会先检查当前系统中是否有相同GTID号,有相同的就自动跳过。
会影响到binlog恢复和主从复制。
2.6.4 GTID的开启和配置
vi /etc/my.cnf
[mysqld]
#GTID模式
gtid-mode=on
#强制GTID一致性
enforce-gtid-consistency=true
#重启mysql
root@localhost 12:37:20->show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name | Value |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery | ON |
| enforce_gtid_consistency | ON |
| gtid_executed_compression_period | 1000 |
| gtid_mode | ON |
| gtid_next | AUTOMATIC |
| gtid_owned | |
| gtid_purged | |
| session_track_gtids | OFF |
+----------------------------------+-----------+
8 rows in set (0.01 sec)
root@localhost 12:37:26->
root@localhost 12:38:27->show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
root@localhost 12:38:31->
开启GTID后,要留意观察Executed_Gtid_Set的号码。
2.6.5 查看GTID信息
mysql>create database db_name charset utf8mb4;
root@localhost 12:42:00->show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000003 | 730 | | | 7a995d76-0a32-11eb-9c4a-525400c58226:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
root@localhost 12:42:05->
Executed_Gtid_Set 号,已经自动生成。
对于DDL等语句,每个语句就是一个GTID号。
DML:insert into, update, delete,必须commit提交之后,才是一个事务
root@localhost 12:49:56->show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000003 | 1180 | | | 7a995d76-0a32-11eb-9c4a-525400c58226:1-5 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
root@localhost 12:50:00->show binlog events in 'mysql-bin.000003';
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
| mysql-bin.000003 | 4 | Format_desc | 3306 | 123 | Server ver: 5.7.26-log, Binlog ver: 4 |
| mysql-bin.000003 | 123 | Previous_gtids | 3306 | 154 | |
| mysql-bin.000003 | 154 | Gtid | 3306 | 219 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:1' |
| mysql-bin.000003 | 219 | Query | 3306 | 346 | use `simon_test`; DROP TABLE `t3` /* generated by server */ |
| mysql-bin.000003 | 346 | Gtid | 3306 | 411 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:2' |
| mysql-bin.000003 | 411 | Query | 3306 | 538 | use `simon_test`; DROP TABLE `t4` /* generated by server */ |
| mysql-bin.000003 | 538 | Gtid | 3306 | 603 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:3' |
| mysql-bin.000003 | 603 | Query | 3306 | 730 | use `simon_test`; DROP TABLE `t1` /* generated by server */ |
| mysql-bin.000003 | 730 | Gtid | 3306 | 795 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:4' |
| mysql-bin.000003 | 795 | Query | 3306 | 905 | use `simon_test`; create table t1 (id int) |
| mysql-bin.000003 | 905 | Gtid | 3306 | 970 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:5' |
| mysql-bin.000003 | 970 | Query | 3306 | 1048 | BEGIN |
| mysql-bin.000003 | 1048 | Table_map | 3306 | 1099 | table_id: 116 (simon_test.t1) |
| mysql-bin.000003 | 1099 | Write_rows | 3306 | 1149 | table_id: 116 flags: STMT_END_F |
| mysql-bin.000003 | 1149 | Xid | 3306 | 1180 | COMMIT /* xid=38 */ |
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
15 rows in set (0.00 sec)
root@localhost 12:50:02-
2.6.6 基于GTID的binlog恢复
drop table t1;
再查看GTID :
root@localhost 12:52:25->show binlog events in 'mysql-bin.000003';
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
| mysql-bin.000003 | 4 | Format_desc | 3306 | 123 | Server ver: 5.7.26-log, Binlog ver: 4 |
| mysql-bin.000003 | 123 | Previous_gtids | 3306 | 154 | |
| mysql-bin.000003 | 154 | Gtid | 3306 | 219 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:1' |
| mysql-bin.000003 | 219 | Query | 3306 | 346 | use `simon_test`; DROP TABLE `t3` /* generated by server */ |
| mysql-bin.000003 | 346 | Gtid | 3306 | 411 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:2' |
| mysql-bin.000003 | 411 | Query | 3306 | 538 | use `simon_test`; DROP TABLE `t4` /* generated by server */ |
| mysql-bin.000003 | 538 | Gtid | 3306 | 603 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:3' |
| mysql-bin.000003 | 603 | Query | 3306 | 730 | use `simon_test`; DROP TABLE `t1` /* generated by server */ |
| mysql-bin.000003 | 730 | Gtid | 3306 | 795 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:4' |
| mysql-bin.000003 | 795 | Query | 3306 | 905 | use `simon_test`; create table t1 (id int) |
| mysql-bin.000003 | 905 | Gtid | 3306 | 970 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:5' |
| mysql-bin.000003 | 970 | Query | 3306 | 1048 | BEGIN |
| mysql-bin.000003 | 1048 | Table_map | 3306 | 1099 | table_id: 116 (simon_test.t1) |
| mysql-bin.000003 | 1099 | Write_rows | 3306 | 1149 | table_id: 116 flags: STMT_END_F |
| mysql-bin.000003 | 1149 | Xid | 3306 | 1180 | COMMIT /* xid=38 */ |
| mysql-bin.000003 | 1180 | Gtid | 3306 | 1245 | SET @@SESSION.GTID_NEXT= '7a995d76-0a32-11eb-9c4a-525400c58226:6' |
| mysql-bin.000003 | 1245 | Query | 3306 | 1372 | use `simon_test`; DROP TABLE `t1` /* generated by server */ |
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
17 rows in set (0.00 sec)
root@localhost 12:52:36->
(1) 截取
gtid格式:
server_id:TID(一个事务,一个ID)
7a995d76-0a32-11eb-9c4a-525400c58226:4-5
mysqlbinlog --include-gtids='7a995d76-0a32-11eb-9c4a-525400c58226:4-5' ./mysql-bin.xxxxxx
[root@mysql-node01 binlog]# mysqlbinlog --include-gtids='7a995d76-0a32-11eb-9c4a-525400c58226:4-5' ./mysql-bin.000003 > /tmp/bak.sql
(2) 恢复:
set sql_log_bin=0;
source /tmp/gitd_bak.sql;
set sql_log_bin=1;
(3)报错
没恢复成功,报错?为什么报错?
因为幂等性的检查,4-5事务已经做过了。
(4) 正确的做法是什么?
mysqlbinlog 导出的时候,应该添加 --skip-gtids 参数
--skip-gtids 作用:导出时忽略原有gtid信息,恢复时,生成最新的gtid信息。
[root@mysql-node01 binlog]# mysqlbinlog --skip-gtids --include-gtids='7a995d76-0a32-11eb-9c4a-525400c58226:4-5' ./mysql-bin.000003 > /tmp/bak.sql
mysql -e "source /tmp/gtid_bak.sql"
mysql -e "show tables from db_name;select * from tb_name;"
2.6.7 GTID 相关参数
--skip-gtids 导出时,跳过原有gtid信息
--include-gtids 导出时,指定GTID事务号(多个事务,用逗号分开)
--include-gtids='server_id:1-3','server_id:6-9','server_id:12'
--exclude-gtids 导出时,忽略指定GTIT事务号
--include-gtids='server_id:4','server_id:5','server_id:12'
2.7 二进制日志其他操作
2.7.1 自动清理日志
show variables like '%expire%';
expire_logs_days 0
自动清理时间,是要按照全备周期+1
set global expire_logs_days=8;
永久生效:
my.cnf
[mysqld]
expire_logs_days=15;
企业建议,至少保留两个全备周期+1的binlog
2.7.2 手工清理
show binary logs;
PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
PURGE BINARY LOGS TO 'mysql-bin.000010';
注意:不要手工 rm binlog文件
1. my.cnf binlog关闭掉,启动数据库
2.把数据库关闭,开启binlog,启动数据库
删除所有binlog,并从000001开始重新记录日志
*reset master; 主从关系中,主库执行此操作,主从环境必崩
2.8 日志是怎么滚动
flush logs;
重启mysql也会自动滚动一个新的
日志文件达到1G大小(max_binlog_size)
oot@localhost 02:57:40->show variables like 'max_binlog_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+
1 row in set (0.00 sec)
root@localhost 03:00:58->
备份时,加入参数也可以自动滚动
3.慢日志
3.1 作用
记录mysql工作中,运行较慢的语句,优化过程中常用的工具日志。
3.2 如何配置
# 开关
slow_query_log=1
# 文件位置及名字
slow_query_log_file=/path/slow.log
# 设定慢查询时间
long_query_time=0.1
# 没走索引的语句也记录
show global variables like 'log_querie%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
1 row in set (0.001 sec)
log_queries_not_useing_indexes
log_queries_not_using_indexes
long_query_time 满语句时间,默认是10.000000秒
root@localhost 01:34:58->select @@long_query_time;
+-------------------+
| @@long_query_time |
+-------------------+
| 10.000000 |
+-------------------+
1 row in set (0.00 sec)
root@localhost 01:35:08->
long_query_time 设置时间,根据具体业务做综合因素评估,然后再决定。
3.3 模拟慢查询
略
3.4 分析慢日志
[root@mysql-node01 ~]# mysqldumpslow -s c -t 10 ./node3-slow.log
-s 作用: sort 排序
c 作用: count c 次数
-t 作用: top 前10
默认会用执行时间做第二围度排序
slow 语句排序
优先以执行次数做排序,找出最热语句。
[root@mysql-node01 ~]# mysqldumpslow -s c -t 10 ./node3-slow.log
# 执行次数 #平均执行时间
Count: 23392 Time=0.00s (0s) Lock=0.00s (0s) Rows=0.0 (0), 0users@0hosts
Time: N N:N:N
# User@Host: spree_online_user[spree_online_user] @ [N.N.N.N]
# Thread_id: N Schema: winstar_spree QC_hit: No
# Query_time: N.N Lock_time: N.N Rows_sent: N Rows_examined: N
SET timestamp=N;
select count(myoilcoupo0_.id) as col_0_0_ from cbc_my_oil_coupon myoilcoupo0_ where myoilcoupo0_.order_id like 'S'
找出语句,然后 desc/explain 分析执行计划
3.5 第三方工具(自己扩展)
https://www.percona.com/downloads/percona-toolkit/LATEST/
yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL per-Digest-MD5
toolkit工具包中的命令:
pt-query-diagest /path/slow.log
Anemometer 基于 pt-query-digest 将MySQL 慢查询可视化

浙公网安备 33010602011771号