Percona Toolkit 神器全攻略(配置类)
Percona Toolkit 神器全攻略(配置类)
Percona Toolkit 神器全攻略系列共八篇,前文回顾:
前文回顾 |
---|
Percona Toolkit 神器全攻略 |
Percona Toolkit 神器全攻略(实用类) |
全文约定:
$
为命令提示符、greatsql>
为GreatSQL数据库提示符。在后续阅读中,依据此约定进行理解与操作
配置类
在Percona Toolkit中配置类共有以下工具
pt-config-diff
:比较数据库配置文件和参数pt-mysql-summary
:对GreatSQL/MySQL配置和status进行汇总pt-variable-advisor
:分析参数,并提出建议
pt-config-diff
概要
比较 GreatSQL/MySQL 配置文件和服务器变量
用法
- pt-config-diff [OPTIONS] CONFIG CONFIG [CONFIG...]
选项
该工具所有选项如下
参数 | 含义 |
---|---|
--ask-pass | 连接 GreatSQL/MySQL 时提示输入密码 |
--charset | 字符集 |
--config | 读取这个逗号分隔的配置文件列表,如果指定,这必须是命令行上的第一个选项 |
--database | 连接到该数据库 |
--defaults-file | 只从给定文件中读取 GreatSQL/MySQL 选项 |
--help | 显示帮助 |
--host | 连接到主机 |
--[no]ignore-case | 比较变量时不区分大小写 |
--ignore-variables | 忽略、不比较这些变量 |
--password | 用于连接的密码 |
--pid | 创建给定的 PID 文件 |
--port | 用于连接的端口号 |
--[no]report | 将 GreatSQL/MySQL 配置差异报告打印到 STDOUT |
--report-width | 将报告行截断为设定的字符 |
--set-vars | 在这个以逗号分隔的 variable=value 对列表中设置 GreatSQL/MySQL 变量 |
--socket | 用于连接的套接字文件 |
--user | 登录的用户 |
--version | 显示版本 |
--[no]version-check | 版本检查 |
最佳实践
首先创建两个配置文件(这里为了示范方便配置文件内容较少)
# 以下创建test_my_1.cnf配置文件 $ vim test_my_1.cnf [client] socket = /data/GreatSQL/mysql.sock [mysql] loose-skip-binary-as-hex no-auto-rehash [mysqld] user = mysql port = 3306 server_id = 3306 innodb_buffer_pool_size = 16G loose-group_replication_group_seeds = '172.16.16.10:33061,172.16.16.12:33061,172.16.16.12:33061' loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1" # 以下创建test_my_2.cnf配置文件 $ vim test_my_2.cnf [client] socket = /data/greatsql/greatsql.sock [mysql] loose-skip-binary-as-hex no-auto-rehash [mysqld] user = greatsql port = 3308 server_id = 3308 innodb_buffer_pool_size = 8G loose-group_replication_group_seeds = '172.16.10:33081,172.16.10:33081,172.16.10:33081' loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaab1"
因为在配置MGR的时候,需要集群中的my.cnf部分配置一致,所以这个配置文件对比还是很有用处的
配置文件对比
不一致才会输出,如果完全一致不会输出
$ pt-config-diff /data/test_my_1.cnf /data/test_my_2.cnf 6 config differences Variable /data/test_my_1.cnf /data/test_my_2.cnf ========================= ========================= ========================= innodb_buffer_pool_size 17179869184 8589934592 loose_group_replicatio... aaaaaaaa-aaaa-aaaa-aaa... aaaaaaaa-aaaa-aaaa-aaa... loose_group_replicatio... 172.16.16.10:33061,172... 172.16.10:33081,172.16... port 3306 3308 server_id 3306 3308 user mysql greatsql
但是上面的输出不够完整,有的输出被省略,此时可以加上--report-width 200
,便可完整输出
$ pt-config-diff /data/test_my_1.cnf /data/test_my_2.cnf --report-width 200 6 config differences Variable /data/test_my_1.cnf /data/test_my_2.cnf ========================== ======================================================== =============================================== innodb_buffer_pool_size 17179869184 8589934592 loose_group_replication... aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1 aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaab1 loose_group_replication... 172.16.16.10:33061,172.16.16.12:33061,172.16.16.12:33061 172.16.10:33081,172.16.10:33081,172.16.10:33081 port 3306 3308 server_id 3306 3308 user mysql greatsql
配置文件和系统变量对比
配置文件与本机GreatSQL系统变量对比,如果完全一致,则不输出
$ pt-config-diff --report-width=200 /etc/my.cnf u=root,p= 1 config difference Variable /etc/my.cnf myarch ========================= =========== ================================ slow_query_log_file slow.log /data/GreatSQL/myarch.log.000001
系统变量之间的对比
两台不同的数据库实例之间的系统变量对比
$ pt-config-diff --report-width=200 h=192.168.6.55,P=3306,u=GreatSQL,p= h=192.168.6.129,P=3306,u=test,p='test' 104 config differences Variable myarch hy ========================== ==================================================================== ==================================================================== admin_tls_version TLSv1.2,TLSv1.3 TLSv1.2 back_log 1024 151 basedir /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/ /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64/ binlog_cache_size 4194304 32768 binlog_expire_logs_seconds 604800 2592000 binlog_rows_query_log_e... ON OFF ......下方省略
pt-mysql-summary
概要
打印出来GreatSQL/MySQL的描述信息,包括:版本信息,数据目录,命令的统计,用户,数据库以及复制等信息还包括各个变量(status、variables)信息和各个变量的比例信息,还有配置文件等信息。
用法
- pt-mysql-summary [OPTIONS]
选项
该工具所有选项如下
参数 | 含义 |
---|---|
--all-databases | mysqldump 并汇总所有数据库 |
--ask-pass | 连接 GreatSQL/MySQL 时提示输入密码 |
--config | 读取这个逗号分隔的配置文件列表,如果指定,这必须是命令行上的第一个选项 |
--databases | mysqldump 并总结这个以逗号分隔的数据库列表。如果要转储和汇总所有数据库,请指定 --all-databases |
--defaults-file | 只从给定文件中读取 GreatSQL/MySQL 选项 |
--help | 显示帮助 |
--host | 要连接的主机 |
--list-encrypted-tables | 包括所有数据库中加密表的列表。这可能会导致速度变慢,因为查询信息模式表可能会很慢。 |
--password | 连接时使用的密码 |
--port | 用于连接的端口号 |
--read-samples | 从此目录中找到的文件创建报告 |
--save-samples | 将用于生成摘要的数据文件保存在此目录中 |
--sleep | 收集状态计数器时休眠的秒数 |
--socket | 用于连接的套接字文件 |
--user | 登录的用户 |
--version | 显示版本 |
最佳实践
$ pt-mysql-summary --user=root --password=greatsql --host=localhost --port=3306
此时会输出所有关于GreatSQL的信息,但是要注意很多输出都是做了四舍五入,并不是精确的数据
不建议此工具远程连接其它数据库,因为可能导致输出数据混乱
接下来将此工具输出结果分成各个模块介绍
# Percona Toolkit MySQL Summary Report ####################### System time | 2024-03-14 08:19:45 UTC (local TZ: CST +0800) # Instances ################################################## Port Data Directory Nice OOM Socket ===== ========================== ==== === ====== # MySQL Executable ########################################### Path to executable | /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld Has symbols | Yes # Slave Hosts ################################################ No slaves found
这四个部分显示报告是在哪台服务器上生成的以及该服务器上正在运行哪些 GreatSQL 实例,这是从 ps
的输出中检测到的,并不总是检测所有实例和参数。
# Report On Port 3306 ######################################## User | root@localhost Time | 2024-03-14 16:19:45 (+08:00) Hostname | myarch Version | 8.0.32-25 GreatSQL, Release 25, Revision 79f57097e3f Built On | Linux x86_64 Started | 2024-03-08 09:50 (up 6+06:29:24) Databases | 9 Datadir | /data/GreatSQL/ Processes | 2 connected, 2 running Replication | Is not a slave, has 0 slaves connected Pidfile | mysql.pid (does not exist)
本节是 GreatSQL 实例的快速摘要:版本、正常运行时间和其他非常基本的参数。时间输出是从 GreatSQL 服务器生成的,可能与之前打印的系统日期和时间不同,如果不同的话可以检查下数据库和操作系统的时间是否匹配
# Processlist ################################################ Command COUNT(*) Working SUM(Time) MAX(Time) ------------------------------ -------- ------- --------- --------- Daemon 1 1 500000 500000 Query 1 1 0 0 Sleep 1 0 450 450 ......中间省略 State COUNT(*) Working SUM(Time) MAX(Time) ------------------------------ -------- ------- --------- --------- 1 0 0 0 init 1 1 0 0 Waiting on empty queue 1 1 500000 500000
本节是 SHOW PROCESSLIST
输出的摘要,这里的数字会四舍五入,不是最精确的
# Status Counters (Wait 10 Seconds) ########################## Variable Per day Per second 10 secs Aborted_clients 10 Aborted_connects 2 Binlog_snapshot_position 100 .......中间省略 Table_open_cache_overflows 30 Threadpool_idle_threads 2 Threadpool_threads 2 Threads_created 25 Uptime 90000 1 1
此部分显示从 SHOW GLOBAL STATUS
的两个快照中选择的计数器,这些快照间隔大约 10 秒收集并进行模糊舍入。
-
第一列是变量名称。
-
第二列是第一个快照的计数器除以 86400(一天的秒数),因此您可以看到计数器每天的变化幅度。 86400 次模糊轮换到 90000,因此正常运行时间计数器应始终约为 90000。
-
第三列是第一个快照的值,除以正常运行时间,然后进行模糊舍入,因此它大致表示计数器在服务器正常运行时间内每秒增长的速度。
-
第四列是第一个和第二个快照的增量差异,除以正常运行时间的差异,然后进行模糊舍入。因此,它显示了生成报告时计数器每秒增长的速度。
# Table cache ################################################ Size | 1024 Usage | 70%
此部分显示表缓存的大小,后面是表缓存的使用百分比。
# Key Percona Server features ################################ Table & Index Stats | Disabled Multiple I/O Threads | Enabled Corruption Resilient | Enabled Durable Replication | Not Supported Import InnoDB Tables | Not Supported Fast Server Restarts | Not Supported Enhanced Logging | Disabled Replica Perf Logging | Enabled Response Time Hist. | Not Supported Smooth Flushing | Not Supported HandlerSocket NoSQL | Not Supported Fast Hash UDFs | Unknown
本节显示 Percona Server 中可用的特性和启用情况。
# Plugins #################################################### InnoDB compression | ACTIVE
本节显示特定插件以及它们是否已启用
该工具只检测少数几个Plugin,并不是所有的插件都检测
# Schema ##################################################### Specify --databases or --all-databases to dump and summarize schemas # 如果没指定--databases or --all-databases 则不会打印 # Schema ##################################################### Database Tables Views SPs Trigs Funcs FKs Partn mysql 38 aptest 7 db2 1 sys_audit 1 test_db 11 tpch 8 Database InnoDB CSV aptest 7 db2 1 mysql 2 2 sys_audit 1 test_db 11 tpch 8 Database BTREE aptest 7 db2 1 mysql 45 sys_audit 1 test_db 19 tpch 17 # 下方部分输出为了紧凑显示,作者将这些列标题设置为垂直输出 # 需要您从顶部向下阅读,第一列是 char ,第二列是 timestamp c t s i t e v f t b s j b m m t d d d d h i e n e n a l i i m s l e e i a o a e a m t t x u r o n g a o o d d m t u t c r e t m c a y i l n b i i e e b e i s h t i n l u u t l m t a n t i m m i e a a r t n t b m l m t e l e p x o t b Database === === === === === === === === === === === === === === === === === === === === aptest 23 1 58 19 9 3 2 db2 1 1 mysql 64 10 4 46 31 61 25 5 15 23 6 2 4 2 2 2 sys_audit 11 1 test_db 3 2 33 2 29 4 3 1 7 2 5 tpch 16 19 13 4 9
如果您指定 --databases
或 --all-databases
,该工具将打印以上部分
本节显示了数据库中对象的数量和类型,它是通过运行 mysqldump --no-data
生成的,而不是通过查询INFORMATION_SCHEMA
生成
本节中的第一个子报告是每个数据库中按类型划分的对象计数:表、视图等。第二个显示每个数据库中有多少表使用不同的存储引擎。第三个子报告显示每个数据库中每种类型索引的数量。
最后一部分显示每个数据库中各种数据类型的列数。为了紧凑显示,列标题的格式是垂直的,因此您需要从顶部向下阅读。在此示例中,第一列是 char
,第二列是 timestamp
这部分输出的数字都是精确的,不是四舍五入的
# Noteworthy Technologies #################################### SSL | No Explicit LOCK TABLES | No Delayed Insert | No XA Transactions | No NDB Cluster | No Prepared Statements | No Prepared statement count | 0
此部分显示该服务器上使用的一些特定技术。
# InnoDB ##################################################### Version | 8.0.32-8.0.32 Buffer Pool Size | 2.0G Buffer Pool Fill | 70% Buffer Pool Dirty | 0% ......中间省略 Pending I/O Flushes | 7 buf pool, 0 log Transaction States | 3xnot started
此部分显示InnoDB 存储引擎的重要配置变量。缓冲池填充百分比和脏百分比是模糊舍入的。最后几行来自 SHOW INNODB STATUS 的输出。
# MyISAM ##################################################### Key Cache | 32.0M Pct Used | 20% Unflushed | 0%
此部分显示 MyISAM 键缓存的大小,后面是正在使用的缓存百分比和未刷新百分比(四舍五入)
# Security ################################################### Users | 2 users, 0 anon, 0 w/o pw, 2 old pw Old Passwords |
此部分显示根据对 GreatSQL 系统数据库中的表的查询生成的。它显示了存在多少用户,以及各种潜在的安全风险,例如旧式密码和无密码的用户。
# Binary Logging ############################################# Binlogs | 8 Zero-Sized | 0 Total Size | 10.6G binlog_format | ROW expire_logs_days | 0 sync_binlog | 1 server_id | 3306 binlog_do_db | binlog_ignore_db |
此部分显示二进制日志的配置和状态。如果存在大小为0的二进制日志,则可能是二进制日志索引与磁盘上实际存在的二进制日志不同步。
# Noteworthy Variables ####################################### Auto-Inc Incr/Offset | 1/1 default_storage_engine | InnoDB flush_time | 0 init_connect | init_file | sql_mode | ......中间省略 log_queries_not_using_indexes | ON log_slave_updates | ON
此部分显示几个值得注意的服务器配置变量,在使用该服务器时了解这些变量可能很重要。
# Configuration File ######################################### Config File | /etc/my.cnf
最后部分显示 my.cnf 文件的精美打印版本,其中删除了注释并添加了空格以对齐内容以便于阅读。
pt-variable-advisor
概要
这是一款分析参数,并且给出参数设置建议的工具
用法
- pt-variable-advisor [OPTIONS] [DSN]
选项
该工具所有选项如下
参数 | 含义 |
---|---|
--ask-pass | 连接 GreatSQL/MySQL 时提示输入密码 |
--charset | 字符集 |
--config | 读取这个逗号分隔的配置文件列表,如果指定,这必须是命令行上的第一个选项 |
--daemonize | 后台运行 |
--database | 连接到该数据库 |
--defaults-file | 只从给定文件中读取 GreatSQL/MySQL 选项 |
--help | 显示帮助 |
--host | 要连接的主机 |
--ignore-rules | 忽略这些规则 ID |
--password | 连接时使用的密码 |
--pid | 创建给定的 PID 文件 |
--port | 连接时使用的端口号 |
--set-vars | 在这个以逗号分隔的 variable=value 对列表中设置 GreatSQL/MySQL 变量 |
--socket | 用于连接的套接字文件 |
--source-of-variables | 从此源读取 SHOW VARIABLES |
--user | 登录的用户 |
--verbose | 增加输出的详细程度 |
--version | 显示版本 |
--[no]version-check | 版本检查 |
最佳实践
分析本地GreatSQL数据库参数的一些建议
$ pt-variable-advisor localhost # WARN delay_key_write: MyISAM index blocks are never flushed until necessary. # WARN innodb_log_buffer_size: The InnoDB log buffer size generally should not be set larger than 16MB. # NOTE read_buffer_size-1: The read_buffer_size variable should generally be left at its default unless an expert determines it is necessary to change it. # NOTE read_rnd_buffer_size-1: The read_rnd_buffer_size variable should generally be left at its default unless an expert determines it is necessary to change it. # NOTE sort_buffer_size-1: The sort_buffer_size variable should generally be left at its default unless an expert determines it is necessary to change it. # WARN expire_logs_days: Binary logs are enabled, but automatic purging is not enabled. # NOTE innodb_data_file_path: Auto-extending InnoDB files can consume a lot of disk space that is very difficult to reclaim later. # WARN myisam_recover_options: myisam_recover_options should be set to some value such as BACKUP,FORCE to ensure that table corruption is noticed.
当然也可以把SHOW VARIABLES
输出的结果保存在pt_va.txt
文件中,然后再用工具分析
$ pt-variable-advisor localhost --source-of-variables pt_va.txt
个人觉得除了非常明显的错误,否则这个建议没有太多的意义。
这里也推荐一个网页版的GreatSQL/MySQL状态诊断工具,由叶老师出品➡https://imysql.com/my-state-diag.html
本文完 :) 下章节将介绍Percona Toolkit 神器全攻略(监控类)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
日常Bug排查-改表时读数据不一致
日常Bug排查-改表时读数据不一致 前言 日常Bug排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。 Bug现场 线上连续两天出现NP异常,而且都是凌晨低峰期才出现,在凌晨的流量远没有白天高峰期大。而出问题的接口又是通常的业务请求。于是,很自然的,我们就想凌晨有什么特殊的运维动作,翻了下时间线。发现,每天凌晨都会进行改表,而修改的这张表恰好就是出现NP异常的表。如下图所示: 在此解释下业务的相关场景。A表是主表,B表是子表,两者都是严格保证在一个事务内一块插入和更新的,在该表时刻确出现了在一个事务内查询,能查到A确查不到B的现象。 思路 数据库的一个核心特性就是原子性,看上去这个场景破坏了原子性。但是由于是和改表强相关,其它时间没有类似错误。那么很明显的,思路就会指向该表这个动作会短暂的破坏原子性。由于线上使用的ghost进行改表,于是笔者就看了下ghost改表的原理: ghost会创建一个影子表,在影子表上完成alter改表,然后分批将全量数据应用到新表。 同时在处理增量数据的时候,通过解析binLog事件,将任务期间的新增数据应用到新表...
- 下一篇
官答丨操作系统升级 Openssl 导致 GreatSQL 无法启动
官答丨操作系统升级 Openssl 导致 GreatSQL 无法启动 官答栏目针对 GreatSQL 数据库中的问题,选取官方论坛和讨论群中的典型提问进行深入解答。内容涵盖数据库安装部署、配置优化、故障排查、性能测试等方面。 在文章中,不仅提供解决方案,还会结合实例深入剖析问题的成因,提升读者对 GreatSQL 数据库的理解能力。 如果你在管理、使用 GreatSQL 数据库时遇到棘手的技术难题,想系统地学习提高数据库技能,就来看看官答的文章吧。这里不仅可以找到可靠的解决方法,还能从中学习到数据库优化的经验和思路。 通过阅读官答的内容,可以全面地掌握 GreatSQL 数据库管理的技能,熟练应对各种故障情况。快来关注官答栏目,与我们一起成长! 本问题来自讨论区群,用户使用数据库环境大概介绍如下: 名称 版本 操作系统 CentOS 7 系统内核版本 3.10.0-1160.118.1.el7.x86_64 openssl升级之前版本 1.0.2k openssl升级之后版本 1.1.1w 数据库版本 GreatSQL-8.0.32-25 用户问题 用户提供的问题信息内容如下: 1、O...
相关文章
文章评论
共有0条评论来说两句吧...