作者:杨涛涛
资深数据库专家,专研 MySQL 十余年。善于 MySQL、PostgreSQL、MongoDB 等开源数据库相干的备份复原、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相干技术支持、MySQL 相干课程培训等工作。
本文起源:原创投稿
* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。
通常对于 MySQL 运行慢、异样运行等等景象,须要通过收集过后的诊断报告以便前期重点剖析并且给出对应解决方案。对于 MySQL 来讲,目前收集诊断报告的办法大抵有以下几类:
-
手动写脚本收集。
-
Percona-toolkit 工具集里自带的 pt-stalk。
-
MySQL 的 sys 库自带存储过程 diagnostics。
-
MySQL Shell 工具的 util 组件(需降级到 MySQL 8.0.31 最新版能力体验全副诊断程序)
这些工具基本上都能够从不同水平收集 OS 以及 MySQL SERVER 的诊断数据,并且生成对应的诊断报告。明天咱们来介绍 MySQL Shell 最新版本 8.0.31 的 util 组件带来的全新诊断报告收集性能。
util.debug 属性有三个诊断函数:
-
collect_diagnostics 用来收集单实例、正本集、InnoDB Cluster 的诊断数据。(<u> 旧版本 8.0.30 也能够用,不过性能不是很全面 </u>)
-
collect_high_load_diagnostics 用来循环屡次收集,并找出负载异样的诊断数据。
-
collect_slow_query_diagnostics 用来对函数 collect_diagnostics 收集到的慢日志做进一步剖析。
明天咱们先来介绍第一个函数 collect_diagnostics 如何应用:
函数 collect_diagnostics 用来收集如下诊断数据并给出对应诊断报告:
- 无主键的表
- 死索引的表
- MySQL 谬误日志
- 二进制日志元数据
- 正本集状态(蕴含主库和从库)
- InnoDB Cluster 监控数据
- 表锁、行锁等数据
- 以后连贯会话数据
- 以后内存数据
- 以后状态变量数据
- 以后 MySQL 慢日志(需被动开启开关)
- OS 数据(CPU、内存、IO、网络、MySQL 过程严重错误日志过滤等)
函数 collect_diagnostics 有两个入参:一个是输入门路;另一个是可选字典配置选项,比方能够配置慢日志收集、定制执行 SQL 语句、定制执行 SHELL 命令等等。
以下是罕用调用示例:
-
只传递参数 1,给定诊断数据打包输入门路,诊断报告会整体打包为 /tmp/cd1.zip。
util.debug.collect_diagnostics('/tmp/cd1')
-
激活慢日志抓取(必须条件:MySQL 慢日志开关开启、日志输入格局为 TABLE),诊断报告会整体打包为 /tmp/cd2.zip,并且蕴含慢日志诊断报告。
util.debug.collect_diagnostics('/tmp/cd2',{"slowQueries":True})
-
定制执行 SQL:收集预置诊断报告同时也收集给定的 SQL 语句执行后果。
util.debug.collect_diagnostics('/tmp/cd3',{"customSql":["select * from ytt.t1 order by id desc limit 100"]})
-
定制执行 SHELL 命令:收集预置诊断报告同时也收集给定的 SHELL 命令执行后果。
util.debug.collect_diagnostics('/tmp/cd4',{"customShell":["ps aux | grep mysqld"]})
-
收集所有成员诊断数据(正本集或者 InnoDB Cluster)。
util.debug.collect_diagnostics('/tmp/cd5',{"allMembers":True})
别离执行以上 5 条命令,在 /tmp 目录下会生成如下文件:以下 5 个打包文件即是咱们运行的 5 条命令的后果。
root@ytt-pc:/tmp# ll cd*
-rw------- 1 root root 893042 1 月 5 10:31 cd1.zip
-rw------- 1 root root 818895 1 月 5 10:55 cd2.zip
-rw------- 1 root root 819183 1 月 5 11:02 cd3.zip
-rw------- 1 root root 835387 1 月 5 11:06 cd4.zip
-rw------- 1 root root 2040913 1 月 5 11:31 cd5.zip
要查看具体诊断报告,得先解压这些文件。先来看下 cd2.zip 解压后的内容:对于收集的诊断数据,有 tsv 和 yaml 两种格局的报告文件。报告文件以数字 0 结尾,示意这个诊断报告来自一台单实例 MySQL。
root@ytt-pc:/tmp/cd/cd2# ls|more
0.error_log
0.global_variables.tsv
0.global_variables.yaml
0.information_schema.innodb_metrics.tsv
0.information_schema.innodb_metrics.yaml
0.information_schema.innodb_trx.tsv
0.information_schema.innodb_trx.yaml
0.instance
0.metrics.tsv
0.performance_schema.events_waits_current.tsv
0.performance_schema.events_waits_current.yaml
0.performance_schema.host_cache.tsv
0.performance_schema.host_cache.yaml
0.performance_schema.metadata_locks.tsv
0.performance_schema.metadata_locks.yaml
...
比方查看此实例的连贯字符串:
root@ytt-pc:/tmp/cd/cd2# cat 0.uri
mysql://root@localhost:3306
以下为对应的慢日志报告:别离为慢日志数据、95 分位慢日志数据以及依据扫描行数排序的慢日志数据。
root@ytt-pc:/tmp/cd/cd2# ls *slow*
0.slow_log.tsv 0.slow_queries_in_95_pctile.tsv 0.slow_queries_summary_by_rows_examined.tsv
0.slow_log.yaml 0.slow_queries_in_95_pctile.yaml 0.slow_queries_summary_by_rows_examined.yaml
cd1.zip、cd2.zip、cd3.zip、cd4.zip 都是基于单实例收集的诊断报告,解压后的文件都是以 0 结尾;cd5.zip 是基于正本集收集的诊断报告,解压后的文件是以 1,2,3 结尾,别离代表实例 3310,3311,3312。
比方查看正本集里 3 个成员的连贯字符串:
root@ytt-pc:/tmp/cd/cd5# cat {1,2,3}.uri
mysql://root@127.0.0.1:3310?ssl-mode=required
mysql://root@127.0.0.1:3311?ssl-mode=required
mysql://root@127.0.0.1:3312?ssl-mode=required
目前正本集的拓扑:3310 为主,3311,3312 为从,能够在主库上执行 show replicas 命令失去从库列表
MySQL localhost:3310 ssl SQL > show replicas;
+------------+-----------+------+------------+--------------------------------------+
| Server_Id | Host | Port | Source_Id | Replica_UUID |
+------------+-----------+------+------------+--------------------------------------+
| 2736952196 | 127.0.0.1 | 3312 | 4023085694 | 0824a675-8ca9-11ed-a719-0800278da4ac |
| 3604736168 | 127.0.0.1 | 3311 | 4023085694 | 0526130e-8ca9-11ed-b797-0800278da4ac |
+------------+-----------+------+------------+--------------------------------------+
2 rows in set (0.0002 sec)
从诊断报告里查看实例 3310 的从库列表:
root@ytt-pc:/tmp/cd/cd5# cat 1.SHOW_REPLICAS.yaml
...
#
Host: 127.0.0.1
Port: 3312
Replica_UUID: 0824a675-8ca9-11ed-a719-0800278da4ac
Server_Id: 2736952196
Source_Id: 4023085694
---
Host: 127.0.0.1
Port: 3311
Replica_UUID: 0526130e-8ca9-11ed-b797-0800278da4ac
Server_Id: 3604736168
Source_Id: 4023085694
结语:
MySQL Shell 8.0.31 带来的增强版收集诊断报告性能,能更好的补救 MySQL 在这一块的空缺,防止装置第三方工具,从而简化 DBA 的运维工作。