欢迎来到思维库

思维库

深度解析Percona Toolkit工具集

时间:2025-11-05 00:47:28 出处:域名阅读(143)

作者 | 吴守阳

审校 | 重楼

介绍

Percona Toolkit是深度一套专业的MySQL和MariaDB数据库管理工具,涵盖了从性能优化到数据同步和备份恢复的解析集多个方面。本文将深入探讨Percona Toolkit工具集的工具核心功能和使用场景,帮助你更好地理解和利用这些强大的深度数据库工具。

主要功能和用途

性能优化和分析:

使用pt-query-digest分析慢查询,解析集优化数据库性能。工具使用pt-index-usage检查和优化索引的深度使用情况。

数据归档:

使用pt-archiver归档和清理历史数据。解析集

数据同步和比较:

使用pt-table-checksum检查表之间的工具数据一致性。使用pt-table-sync在数据库服务器之间同步表数据。深度

Schema变更:

使用pt-online-schema-change在线执行表结构更改,解析集避免表锁定问题。工具

实用工具:

使用pt-config-diff比较MySQL配置文件的深度不同之处。使用pt-mysql-summary生成MySQL服务器的解析集摘要信息,方便日常管理和监控。工具

Percona Toolkit工具

1.pt-align

作用:对齐查询输出,方便人们阅读和分析。

示例

复制echo -e "col1 col2\nval1 val2" | pt-align1. 2.pt-archiver

作用:从MySQL表中归档旧数据,以保持表的高性能。

参数:

复制--limit10000 每次取1000行数据用pt-archive处理 --txn-size 1000 设置1000行为一个事务提交一次 --where‘id<3000‘ 设置操作条件 --progress5000 每处理5000行输出一次处理信息 --statistics 输出执行过程及最后的操作统计。(只要不加上--quiet,默认情况下pt-archive都会输出执行过程的) --charset=UTF8 指定字符集为UTF8 --bulk-delete 批量删除source上的免费源码下载旧数据(例如每次1000行的批量删除操作) --bulk-insert 批量插入数据到dest主机 (看dest的general log发现它是通过在dest主机上LOAD DATA LOCAL INFILE插入数据的) --replace 将insert into 语句改成replace写入到dest库 --sleep120 每次归档了limit个行记录后的休眠120秒(单位为秒) --file‘/root/test.txt‘ --purge 删除source数据库的相关匹配记录 --header 输入列名称到首行(和--file一起使用) --no-check-charset 不指定字符集 --check-columns 检验dest和source的表结构是否一致,不一致自动拒绝执行(不加这个参数也行。默认就是执行检查的) --no-check-columns 不检验dest和source的表结构是否一致,不一致也执行(会导致dest上的无法与source匹配的列值被置为null或者0) --chekc-interval 默认1s检查一次 --local 不把optimize或analyze操作写入到binlog里面(防止造成主从延迟巨大) --retries 超时或者出现死锁的话,pt-archiver进行重试的间隔(默认1s) --no-version-check 目前为止,发现部分pt工具对阿里云RDS操作必须加这个参数 --analyze=ds 操作结束后,优化表空间(d表示dest,s表示source) --no-delete 表示不删除原来的数据,注意:如果不指定此参数,所有处理完成后,都会清理原表中的数据1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.

示例:

将表中小于2018-07-01时间的数据进行归档,不删除原表记录pt-archiver --source h=192.168.153.148,P=3306,u=mss,p=mss,D=d1,t=t4 --dest h=192.168.153.148,P=3306,u=mss,p=mss,D=d1,t=t5 --no-check-charset --where day<"2018-07-01" --progress 5000 --no-delete --limit=10000 --statistics将表中小于2018-07-01时间的数据进行归档,删除原表记录,优化表空间(因为这种操作费时间,并且需要你提前预估有足够的b2b信息网磁盘空间用于拷贝表)pt-archiver --source h=192.168.153.148,P=3306,u=mss,p=mss,D=d1,t=t4 --dest h=192.168.153.148,P=3306,u=mss,p=mss,D=d1,t=t5 --no-check-charset --where day<"2018-07-01" --progress 5000 --purge --check-columns --analyze=ds --limit=10000 --statistics用于把数据导出文件,不用删除原表中数据 pt-archiver --source h=192.168.153.148,P=3306,u=mss,p=mss,D=d1,t=t4 --no-check-charset --where day<"2018-06-01" --progress 4000 --no-delete --file "/tmp/pt-archiver.dat" --header --limit=10000将表中小于2018-07-01时间的数据进行归档,每10000条一次删除原表记录pt-archiver --source h=192.168.153.148,P=3306,u=mss,p=mss,D=d1,t=t4 --dest h=192.168.153.148,P=3306,u=mss,p=mss,D=d1,t=t5 --no-check-charset --where day<"2018-07-01" --progress 5000 --bulk-delete--limit=10000 --statistics将表中6个月前的数据归档pt-archiver --source h=host,D=db,t=table --dest h=host,D=db,t=archive_table --where "created < NOW() - INTERVAL 6 MONTH"3.pt-config-diff

作用:比较两个MySQL配置文件并显示差异。

示例:

复制pt-config-diff /etc/my.cnf /etc/mysql/my.cnf1. 4.pt-deadlock-logger

作用:记录MySQL中的死锁事件。

参数:

复制 --ask-pass Prompt for a password when connecting to MySQL --charset=s -A Default character set --clear-deadlocks=s Use this table to create a small deadlock --columns=A The columns are: (default server, ts, thread, txn_id, txn_time, user, hostname, ip, db, tbl, idx, lock_type, lock_mode, wait_hold, victim, query) --config=A Read this comma-separated list of config files; if specified, this must be the first option on the command line --create-dest-table Create the table specified by --dest --daemonize Fork to the background and detach from the shell --database=s -D Connect to this database --defaults-file=s -F Only read mysql options from the given file --dest=d DSN for where to store deadlocks; specify at least a database (D) and table (t) --help Show help and exit --host=s -h Connect to host --interval=m How often to check for deadlocks (default 30). Optional suffix s=seconds, m=minutes, h=hours, d=days; if no suffix, s is used. --iterations=i How many times to check for deadlocks --log=s Print all output to this file when daemonized --numeric-ip Express IP addresses as integers --password=s -p Password to use when connecting --pid=s Create the given PID file --port=i -P Port number to use for connection --quiet Do not deadlocks; only print errors and warnings to STDERR --run-time=m How long to run before exiting. Optional suffix s= seconds, m=minutes, h=hours, d=days; if no suffix, s is used. --set-vars=A Set the MySQL variables in this comma-separated list of variable=value pairs --socket=s -S Socket file to use for connection --tab Use tabs to separate columns instead of spaces --user=s -u User for login if not current user --version Show version and exit --[no]version-check Check for the latest version of Percona Toolkit, MySQL, and other programs (default yes)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.

示例:

复制pt-deadlock-logger h=host1 --iterations 1 pt-deadlock-logger --user=username --password=password pt-deadlock-logger h=host1 --dest h=host2,D=percona_schema,t=deadlocks1.2.3. 5.pt-diskstats

作用:收集和显示磁盘I/O统计信息。

示例:

复制pt-diskstats --devices sda,sdb --interval 11. 6.pt-duplicate-key-checker

作用:查找和报告重复的MySQL索引。

参数:

复制Options: --all-structs Compare indexes with different structs (BTREE, HASH, etc) --ask-pass Prompt for a password when connecting to MySQL --charset=s -A Default character set --[no]clustered PK columns appended to secondary key is duplicate ( default yes) --config=A Read this comma-separated list of config files; if specified, this must be the first option on the command line --databases=h -d Check only this comma-separated list of databases --defaults-file=s -F Only read mysql options from the given file --engines=h -e Check only tables whose storage engine is in this comma- separated list --help Show help and exit --host=s -h Connect to host --ignore-databases=H Ignore this comma-separated list of databases --ignore-engines=H Ignore this comma-separated list of storage engines --ignore-order Ignore index order so KEY(a,b) duplicates KEY(b,a) --ignore-tables=H Ignore this comma-separated list of tables --key-types=s Check for duplicate f=foreign keys, k=keys or fk=both ( default fk) --password=s -p Password to use when connecting --pid=s Create the given PID file --port=i -P Port number to use for connection --set-vars=A Set the MySQL variables in this comma-separated list of variable=value pairs --socket=s -S Socket file to use for connection --[no]sql Print DROP KEY statement for each duplicate key ( default yes) --[no]summary Print summary of indexes at end of output (default yes) --tables=h -t Check only this comma-separated list of tables --user=s -u User for login if not current user --verbose -v Output all keys and/or foreign keys found, not just redundant ones --version Show version and exit --[no]version-check Check for the latest version of Percona Toolkit, MySQL, and other programs (default yes)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.

示例:

复制pt-duplicate-key-checker --user=username --password=password1. 7.pt-fifo-split

作用:将输入文件分割成多个文件,并按FIFO顺序处理。

示例:

复制pt-fifo-split --lines 1000 input.txt1. 8.pt-find

作用:查找和列出符合条件的MySQL表。

示例:

复制pt-find --user=username --password=password --database=db --engine=InnoDB1. 9.pt-fingerprint

作用:将SQL查询规范化为指纹形式,以便对类似查询进行分组和统计。

参数:

复制 --match-embedded-numbers Match numbers embedded in words and replace as single values --match-md5-checksums Match MD5 checksums and replace as single values --query=s The query to convert into a fingerprint1.2.3.4.

示例:

复制pt-fingerprint --query="SELECT * FROM users WHERE id = 123 AND username = johndoe;" 输出:SELECT * FROM users WHERE id = ? AND username = ?;1.2. 10.pt-fk-error-logger

作用:记录MySQL中的外键错误。

示例:

复制pt-fk-error-logger --user=username --password=password1. 11.pt-galera-log-explainer

作用:分析和解释Galera Cluster的日志文件。

示例:

复制pt-galera-log-explainer --file /path/to/galera.log1. 12.pt-heartbeat

作用:监控和报告MySQL复制延迟。

示例:

复制pt-heartbeat --update --database=test --table=heartbeat --interval=1 --user=username --password=password1. 13.pt-index-usage

作用:分析和报告MySQL表的索引使用情况。

参数:

复制--ask-pass 连接到 MySQL 时提示输入密码 --charset=s -A 默认字符集 --config=A 读取这个逗号分隔的配置文件列表;如果指定此选项,它必须是命令行上的第一个选项 --create-save-results-database 如果 --save-results-database 不存在,则创建它 --[no]create-views 为 --save-results-database 示例查询创建视图 --database=s -D 连接到的数据库 --databases=h -d 只从这个逗号分隔的数据库列表中获取表和索引 --databases-regex=s 只从名称匹配这个 Perl 正则表达式的数据库中获取表和索引 --defaults-file=s -F 只从指定的文件中读取 MySQL 选项 --drop=H 仅建议删除这些类型的未使用索引(默认非唯一) --empty-save-results-tables 删除并重新创建 --save-results-database 中所有已存在的香港云服务器表 --help 显示帮助信息并退出 --host=s -h 连接到的主机 --ignore-databases=H 忽略这个逗号分隔的数据库列表 --ignore-databases-regex=s 忽略名称匹配这个 Perl 正则表达式的数据库 --ignore-tables=H 忽略这个逗号分隔的表名列表 --ignore-tables-regex=s 忽略名称匹配这个 Perl 正则表达式的表 --password=s -p 连接时使用的密码 --port=i -P 连接使用的端口号 --progress=a 将进度报告打印到 STDERR(默认 time,30) --quiet -q 不打印任何警告 --[no]report 打印 --report-format 的报告(默认是) --report-format=A 目前只有一个报告:drop_unused_indexes(默认 drop_unused_indexes) --save-results-database=d 将结果保存到这个数据库的表中 --set-vars=A 在这个逗号分隔的变量=值列表中设置 MySQL 变量 --socket=s -S 连接使用的套接字文件 --tables=h -t 只从这个逗号分隔的表列表中获取索引 --tables-regex=s 只从名称匹配这个 Perl 正则表达式的表中获取索引 --user=s -u 登录时使用的用户,如果不是当前用户 --version 显示版本信息并退出 --[no]version-check 检查 Percona Toolkit、MySQL 和其他程序的最新版本(默认是) 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.

示例:

复制pt-index-usage --user=username --password=password --database=db slow.log1. 14.pt-ioprofile

作用:记录并显示进程的I/O活动。

示例:

复制pt-ioprofile --pid 12341. 15.pt-k8s-debug-collector

作用:收集Kubernetes集群的调试信息。

参数:

复制--ask-pass 连接到 MySQL 时提示输入密码 --charset=s -A 默认字符集 --config=A 读取这个逗号分隔的配置文件列表;如果指定此选项,它必须是命令行上的第一个选项 --create-save-results-database 如果 --save-results-database 不存在,则创建它 --[no]create-views 为 --save-results-database 示例查询创建视图 --database=s -D 连接到的数据库 --databases=h -d 只从这个逗号分隔的数据库列表中获取表和索引 --databases-regex=s 只从名称匹配这个 Perl 正则表达式的数据库中获取表和索引 --defaults-file=s -F 只从指定的文件中读取 MySQL 选项 --drop=H 仅建议删除这些类型的未使用索引(默认非唯一) --empty-save-results-tables 删除并重新创建 --save-results-database 中所有已存在的表 --help 显示帮助信息并退出 --host=s -h 连接到的主机 --ignore-databases=H 忽略这个逗号分隔的数据库列表 --ignore-databases-regex=s 忽略名称匹配这个 Perl 正则表达式的数据库 --ignore-tables=H 忽略这个逗号分隔的表名列表 --ignore-tables-regex=s 忽略名称匹配这个 Perl 正则表达式的表 --password=s -p 连接时使用的密码 --port=i -P 连接使用的端口号 --progress=a 将进度报告打印到 STDERR(默认 time,30) --quiet -q 不打印任何警告 --[no]report 打印 --report-format 的报告(默认是) --report-format=A 目前只有一个报告:drop_unused_indexes(默认 drop_unused_indexes) --save-results-database=d 将结果保存到这个数据库的表中 --set-vars=A 在这个逗号分隔的变量=值列表中设置 MySQL 变量 --socket=s -S 连接使用的套接字文件 --tables=h -t 只从这个逗号分隔的表列表中获取索引 --tables-regex=s 只从名称匹配这个 Perl 正则表达式的表中获取索引 --user=s -u 登录时使用的用户,如果不是当前用户 --version 显示版本信息并退出 --[no]version-check 检查 Percona Toolkit、MySQL 和其他程序的最新版本(默认是)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.

示例

复制pt-k8s-debug-collector --namespace default1. 16.pt-kill

作用:查找并终止符合条件的MySQL会话。

参数:

复制- `--ask-pass` 连接到MySQL时提示输入密码 - `--charset=s -A` 默认字符集 - `--config=A` 读取这个以逗号分隔的配置文件列表;如果指定,这必须是命令行上的第一个选项 - `--create-log-table` 如果不存在,创建--log-dsn表 - `--daemonize` 后台运行并从shell分离 - `--database=s -D` 用于连接的数据库 - `--defaults-file=s -F` 仅从指定文件读取MySQL选项 - `--filter=s` 丢弃该Perl代码未返回true的事件 - `--group-by=s` 将匹配应用于按此SHOW PROCESSLIST列分组的每类查询 - `--help` 显示帮助并退出 - `--host=s -h` 连接到主机(默认localhost) - `--interval=m` 检查要杀死的查询的频率。可选后缀s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用s - `--json` 以JSON格式打印已杀死的查询,必须与--print一起使用 - `--json-fields=s` 指定在使用--json时要包含在JSON输出中的额外键值对列表,参数值的格式必须为: - `--kill-busy-commands=s` 组:操作(默认Query) - `--log=s` 在后台运行时将所有输出打印到该文件 - `--log-dsn=d` 将每个被杀死的查询存储在此DSN中 - `--password=s -p` 连接时使用的密码 - `--pid=s` 创建给定的PID文件 - `--port=i -P` 用于连接的端口号 - `--query-id` 打印刚被杀死的查询的ID - `--rds` 表示问题实例位于Amazon RDS上 - `--run-time=m` 运行多长时间后退出。可选后缀s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用s - `--sentinel=s` 如果此文件存在则退出(默认/tmp/pt-kill-sentinel) - `--set-vars=A` 在这个以逗号分隔的变量=值对列表中设置MySQL变量 - `--slave-password=s` 设置用于连接从库的密码 - `--slave-user=s` 设置用于连接从库的用户 - `--socket=s -S` 用于连接的套接字文件 - `--stop` 通过创建--sentinel文件停止运行实例 - `--[no]strip-comments` 从PROCESSLIST的Info列中移除SQL注释(默认yes) - `--user=s -u` 登录用户(如果不是当前用户) - `--verbose -v` 打印正在执行的操作信息到STDOUT - `--version` 显示版本并退出 - `--[no]version-check` 检查Percona Toolkit、MySQL和其他程序的最新版本(默认yes) - `--victims=s` 每类匹配的查询中将被杀死的查询(默认oldest) - `--wait-after-kill=m` 杀死一个查询后等待,然后再查找更多要杀死的查询。可选后缀s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用s - `--wait-before-kill=m` 杀死一个查询前等待。可选后缀s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用s 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.

操作:

复制- `--execute-command=s` 当查询匹配时执行此命令 - `--fingerprint` 修改--print行为,强制显示查询指纹而不是原始查询 - `--kill` 杀死匹配查询的连接 - `--kill-query` 杀死匹配查询 - `--print` 打印匹配查询的KILL语句;不实际杀死查询1.2.3.4.5.

类匹配:

复制- `--any-busy-time=m` 如果任何查询运行时间超过此时间,则匹配查询类。“超过”意味着如果您指定10秒,例如,只有在至少有一个查询运行时间超过10秒时,类才会匹配。可选后缀s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用s - `--each-busy-time=m` 如果每个查询运行时间超过此时间,则匹配查询类。“超过”意味着如果您指定10秒,例如,只有当每个查询运行时间超过10秒时,类才会匹配。可选后缀s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用s - `--query-count=i` 如果类中至少有这么多查询,则匹配查询类1.2.3.

查询匹配:

复制- `--busy-time=m` 匹配运行时间超过此时间的查询。可选后缀s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用s - `--idle-time=m` 匹配空闲/睡眠时间超过此时间的查询。可选后缀s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用s - `--ignore-command=s` 忽略Command匹配此Perl正则表达式的查询 - `--ignore-db=s` 忽略db(数据库)匹配此Perl正则表达式的查询 - `--ignore-host=s` 忽略Host匹配此Perl正则表达式的查询 - `--ignore-info=s` 忽略Info(查询)匹配此Perl正则表达式的查询 - `--[no]ignore-self` 不要杀死pt-kill自己的连接(默认yes) - `--ignore-state=s` 忽略State匹配此Perl正则表达式的查询(默认Locked) - `--ignore-user=s` 忽略User匹配此Perl正则表达式的查询 - `--match-all` 匹配所有未被忽略的查询 - `--match-command=s` 仅匹配Command匹配此Perl正则表达式的查询 - `--match-db=s` 仅匹配db(数据库)匹配此Perl正则表达式的查询 - `--match-host=s` 仅匹配Host匹配此Perl正则表达式的查询 - `--match-info=s` 仅匹配Info(查询)匹配此Perl正则表达式的查询 - `--match-state=s` 仅匹配State匹配此Perl正则表达式的查询 - `--match-user=s` 仅匹配User匹配此Perl正则表达式的查询 - `--replication-threads` 允许匹配和杀死复制线程 - `--test-matching=a` 包含PROCESSLIST快照的文件,以测试匹配选项1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.

示例:

复制pt-kill --busy-time 60 --user=username --password=password1. 17.pt-mext

作用:扩展Percona Toolkit的功能,通过加载外部模块。

示例:

复制pt-mext /path/to/module.pm1. 18.pt-mongodb-index-check

作用:检查MongoDB中的索引并报告不必要的索引。

参数:

复制- `-h, --help` 显示上下文相关的帮助信息 - `--version` 显示版本信息 - `--all-databases` 检查所有数据库(不包括系统数据库) - `--databases=DATABASES,...` 要检查的数据库列表,用逗号分隔 - `--all-collections` 检查选定数据库中的所有集合 - `--collections=COLLECTIONS,...` 要检查的集合列表,用逗号分隔 - `--mongodb.uri=mongodb://host:port/admindb?options` 连接URI - `--json` 以JSON格式显示输出1.2.3.4.5.6.7.8.

示例:

复制pt-mongodb-index-check --uri mongodb://localhost:270171. 19.pt-mongodb-query-digest

作用:分析和报告MongoDB查询日志。

示例:

复制pt-mongodb-query-digest /path/to/mongodb.log1. 20.pt-mongodb-summary

作用:提供MongoDB服务器的摘要信息。

示例:

复制pt-mongodb-summary --uri mongodb://localhost:270171. 21.pt-mysql-summary

作用:提供MySQL服务器的摘要信息。

示例:

复制pt-mysql-summary --user=username --password=password1. 22.pt-online-schema-change

作用:在线修改MySQL表的结构,而不会造成服务中断。

参数:

复制- `--alter=s` 进行架构修改,不包括 ALTER TABLE 关键字 - `--alter-foreign-keys-method=s` 修改外键引用新表的方法 - `--[no]analyze-before-swap` 在交换新旧表之前对新表执行 ANALYZE TABLE(默认是) - `--ask-pass` 连接 MySQL 时提示输入密码 - `--channel=s` 使用复制通道连接服务器时使用的通道名称 - `--charset=s, -A` 默认字符集 - `--[no]check-alter` 解析指定的 --alter 并尝试警告可能的意外行为(默认是) - `--[no]check-foreign-keys` 检查自引用外键(默认是) - `--check-interval=m` 检查 --max-lag 之间的休眠时间(默认 1),可选后缀 s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用 s - `--[no]check-plan` 检查查询执行计划的安全性(默认是) - `--[no]check-replication-filters` 如果在任何服务器上设置了任何复制过滤器,则中止(默认是) - `--check-slave-lag=s` 暂停数据复制,直到此副本的延迟小于 --max-lag - `--[no]check-unique-key-change` 如果 --alter 指定的语句尝试添加唯一索引,则避免 pt-online-schema-change 运行(默认是) - `--chunk-index=s` 为块表选择优先的索引 - `--chunk-index-columns=i` 使用 --chunk-index 的最多左列数 - `--chunk-size=z` 每个复制块选择的行数(默认 1000) - `--chunk-size-limit=f` 不要复制比期望块大小大很多的块(默认 4.0) - `--chunk-time=f` 动态调整块大小,以便每个数据复制查询执行时间为该值(默认 0.5) - `--config=A` 读取此逗号分隔的配置文件列表;如果指定,则必须是命令行上的第一个选项 - `--critical-load=A` 在每个块之后检查 SHOW GLOBAL STATUS,并在负载过高时中止(默认 Threads_running=50) - `--data-dir=s` 使用 DATA DIRECTORY 特性在不同分区上创建新表 - `--database=s, -D` 连接到此数据库 - `--default-engine` 从新表中删除 ENGINE - `--defaults-file=s, -F` 仅从给定文件读取 MySQL 选项 - `--[no]drop-new-table` 如果复制原始表失败,则删除新表(默认是) - `--[no]drop-old-table` 重命名原始表后删除它(默认是) - `--[no]drop-triggers` 删除旧表上的触发器。--no-drop-triggers 强制 --no-drop-old-table(默认是) - `--dry-run` 创建并修改新表,但不创建触发器、复制数据或替换原始表 - `--execute` 表明您已阅读文档并希望修改表 - `--[no]fail-on-stopped-replication` 如果复制停止,则失败并显示错误(退出状态 128),而不是等待复制重新启动(默认是) - `--force` 如果使用 alter-foreign-keys-method=none 可能会破坏外键约束,此选项将绕过确认 - `--help` 显示帮助并退出 - `--host=s, -h` 连接到主机 - `--max-flow-ctl=f` 类似于 --max-lag 但用于 PXC 集群 - `--max-lag=m` 暂停数据复制,直到所有副本的延迟小于此值(默认 1s)。可选后缀 s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用 s - `--max-load=A` 在每个块之后检查 SHOW GLOBAL STATUS,并在任何状态变量超过其阈值时暂停(默认 Threads_running=25) - `--new-table-name=s` 在交换前的新表名称。%T 替换为原始表名称(默认 %T_new) - `--null-to-not-null` 允许将允许 NULL 值的列修改为不允许 NULL 值的列 - `--only-same-schema-fks` 仅检查与原始表位于同一模式的外键 - `--password=s, -p` 连接时使用的密码 - `--pause-file=s` 当指定的文件存在时,执行将暂停 - `--pid=s` 创建给定的 PID 文件 - `--plugin=s` 定义 pt_online_schema_change_plugin 类的 Perl 模块文件 - `--port=i, -P` 使用的连接端口号 - `--preserve-triggers` 保留旧触发器 - `--print` 将 SQL 语句打印到 STDOUT - `--progress=a` 复制行时将进度报告打印到 STDERR(默认 time,30) - `--quiet, -q` 不打印消息到 STDOUT(禁用 --progress) - `--recurse=i` 发现副本时递归的层次数 - `--recursion-method=a` 发现副本的首选递归方法(默认 processlist,hosts) - `--remove-data-dir` 如果原始表是使用 DATA DIRECTORY 特性创建的,则删除它,并在 MySQL 默认目录中创建新表而不创建新的 isl 文件(默认否) - `--reverse-triggers` 警告!此选项在开始复制之前在新表上创建反向触发器 - `--set-vars=A` 在此逗号分隔的变量=值对列表中设置 MySQL 变量 - `--skip-check-slave-lag=d` 检查从库延迟时跳过的 DSN - `--slave-password=s` 设置连接从库时使用的密码 - `--slave-user=s` 设置连接从库时使用的用户 - `--sleep=f` 复制每个块后休眠的时间(以秒为单位)(默认 0) - `--socket=s, -S` 使用的连接套接字文件 - `--statistics` 打印内部计数器的统计信息 - `--[no]swap-tables` 交换原始表和新的修改表(默认是) - `--tries=a` 尝试关键操作的次数 - `--user=s, -u` 登录用户(如果不是当前用户) - `--version` 显示版本并退出 - `--[no]version-check` 检查 Percona Toolkit、MySQL 和其他程序的最新版本(默认是)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.

示例:

复制pt-online-schema-change --user=username --password=password --alter "ADD COLUMN new_col INT" D=db,t=table1. 23.pt-pg-summary

作用:提供PostgreSQL服务器的摘要信息。

示例:

复制pt-pg-summary1. 24.pt-pmp

作用:生成进程的MySQL性能剖析报告。

示例:

复制pt-pmp --pid 12341. 25.pt-query-digest

作用:分析和汇总MySQL查询日志,以找出慢查询和高负载查询。

参数:

复制--ask-pass 提示输入连接到MySQL时的密码 --attribute-aliases=a 属性|别名列表,默认为 db|Schema --attribute-value-limit=i 属性值的合理限制,默认为 0 --charset=s -A 默认字符集 --config=A 读取此逗号分隔的配置文件列表;如果指定,必须作为命令行的第一个选项 --[no]continue-on-error 即使出现错误也继续解析,默认为 yes --[no]create-history-table 如果不存在,则创建 --history 表,默认为 yes --[no]create-review-table 如果不存在,则创建 --review 表,默认为 yes --daemonize 后台运行并从 shell 中分离出来 --database=s -D 连接到此数据库 --defaults-file=s -F 仅从给定文件中读取 MySQL 选项 --embedded-attributes=a 两个 Perl 正则表达式模式,用于捕获嵌入在查询中的伪属性 --expected-range=a 当条目多于或少于预期时解释条目,默认为 5,10 --explain=d 使用此 DSN 运行对示例查询的 EXPLAIN 并打印结果 --filter=s 丢弃此 Perl 代码返回 false 的事件 --group-by=A 按此属性的事件分组,默认为 fingerprint --help 显示帮助并退出 --history=d 保存每个查询类的指标到指定表中 --host=s -h 连接到此主机 --ignore-attributes=a 不聚合这些属性,默认为 arg, cmd, insert_id, ip, port, Thread_id, timestamp, exptime, flags, key, res, val, server_id, offset, end_log_pos, Xid --inherit-attributes=a 如果丢失,则从最后一个拥有它们的事件继承这些属性,默认为 db,ts --interval=f 查询进程列表的轮询频率,单位为秒,默认为 0.1 --iterations=i 循环收集和报告的次数,默认为 1 --limit=A 限制输出到给定的百分比或计数,默认为 95%:20 --log=s 当守护程序时将所有输出打印到此文件 --max-hostname-length=i 在报告中截断主机名到此长度,0=不截断,默认为 10 --max-line-length=i 在报告中截断行到此长度,0=不截断,默认为 74 --order-by=A 按此属性和聚合函数排序事件,默认为 Query_time:sum --outliers=a 按属性:百分位:计数报告异常值,默认为 Query_time:1:10 --output=s 如何格式化和打印查询分析结果,默认为 report --password=s -p 连接时使用的密码 --pid=s 创建指定的 PID 文件 --port=i -P 连接使用的端口号 --preserve-embedded-numbers 在指纹查询时保留数据库/表名中的数字 --processlist=d 使用此 DSN 的进程列表轮询查询,默认间隔为 sleep --progress=a 打印进度报告到 STDERR,默认为 time,30 --read-timeout=m 等待输入事件的时间,默认为 0,可选的后缀 s=秒,m=分钟,h=小时,d=天 --[no]report 打印每个 --group-by 属性的查询分析报告,默认为 yes --report-all 报告所有查询,甚至已经审查过的 --report-format=A 打印查询分析报告的这些部分,默认为 rusage,date,hostname,files,header,profile,query_report,prepared --report-histogram=s 绘制此属性值的分布图,默认为 Query_time --resume=s 如果指定,工具将上次的文件偏移量写入指定的文件名 --review=d 保存查询类以供稍后审查,并不报告已经审查过的类 --run-time=m 每次迭代运行的时间,默认为时钟,可选的后缀 s=秒,m=分钟,h=小时,d=天 --run-time-mode=s 设置 --run-time 操作的值,默认为 clock --sample=i 过滤每个查询的前 N 个事件,默认为 0 --set-vars=A 设置这些 MySQL 变量的值,以逗号分隔的变量=值对 --show-all=H 显示这些属性的所有值 --since=s 解析此日期之后的查询,默认为解析自此日期起的查询 --slave-password=s 设置用于连接到从服务器的密码 --slave-user=s 设置用于连接到从服务器的用户 --socket=s -S 使用的连接套接字文件 --timeline 显示事件的时间线 --type=A 解析的输入类型,默认为 slowlog --until=s 解析此日期之前的查询,默认为解析直到此日期的查询 --user=s -u 登录时使用的用户,如果不是当前用户 --variations=A 报告这些属性值的变化数量 --version 显示版本并退出 --[no]version-check 检查 Percona Toolkit、MySQL 和其他程序的最新版本,默认为 yes --[no]vertical-format 在报告的 SQL 查询中输出一个尾随 "\G",默认为 yes --watch-server=s 告诉 pt-query-digest 解析 tcpdump 时观察的服务器 IP 地址和端口(例如 "10.0.0.1:3306");忽略所有其他服务器 ```1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.

示例:

复制pt-query-digest /path/to/slow.log1. 26.pt-secure-collect

作用:收集和报告MySQL的安全信息。

示例:

复制pt-secure-collect --user=username --password=password1. 27.pt-show-grants

作用:显示MySQL用户的权限。

示例:

复制pt-show-grants --user=username --password=password1. 28.pt-sift

作用:收集和分析MySQL服务器的性能数据。

示例:

复制pt-sift --user=username --password=password1. 29.pt-slave-delay

作用:延迟MySQL复制以创建时间点恢复的机会。

示例:

复制pt-slave-delay --delay 1h --user=username --password=password1. 30.pt-slave-find

作用:查找MySQL复制拓扑中的所有从库。

示例:

复制pt-slave-find --user=username --password=password1. 31.pt-slave-restart

作用:监控并自动重启MySQL复制从库。

示例:

复制pt-slave-restart --user=username --password=password1. 32.pt-stalk

作用:在检测到MySQL服务器的问题时收集诊断数据。

示例:

复制pt-stalk --user=username --password=password1. 33.pt-summary

作用:提供MySQL服务器的摘要信息。

示例:

复制pt-summary1. 34.pt-table-checksum

作用:生成MySQL表的校验和以检测复制中的数据差异。

参数:

复制--binary-index 修改 --create-replicate-table 行为,使复制表的上限和下限列使用 BLOB 数据类型 --channel=s 连接到服务器时使用的复制通道名称 --[no]check-binlog-format 检查所有服务器的 binlog_format 是否相同(默认为 yes) --[no]check-plan 检查查询执行计划是否安全(默认为 yes) --chunk-index=s 首选用于分块表的索引 --chunk-index-columns=i 使用索引的左侧这么多列来分块表 --chunk-size=z 每个校验查询选择的行数(默认为 1000) --chunk-time=f 动态调整分块大小,使每个校验查询执行时间为指定秒数(默认为 0.5) --[no]create-replicate-table 如果不存在,则创建 --replicate 数据库和表(默认为 yes) --disable-qrt-plugin 禁用 QRT(查询响应时间)插件(如果已启用) --[no]empty-replicate-table 在对表进行校验之前删除先前的校验结果(默认为 yes) --fail-on-stopped-replication 如果复制已停止,则报错退出(退出状态码 128),而不是等待复制重新启动 --float-precision=i FLOAT 和 DOUBLE 数字到字符串转换的精度 --function=s 校验和的哈希函数(FNV1A_64、MURMUR_HASH、SHA1、MD5、CRC32 等) --pause-file=s 当指定的文件存在时,执行将暂停 --pid=s 创建指定的 PID 文件 --plugin=s 定义 pt_table_checksum_plugin 类的 Perl 模块文件 --progress=a 将进度报告打印到 STDERR(默认为 time,30) --quiet -q 仅打印最重要的信息(禁用 --progress)(默认为 0) --recurse=i 在发现复制时递归的层级数 --recursion-method=a 发现复制时的首选递归方法(默认为 processlist,hosts) --replicate=s 将校验结果写入此表(默认为 percona.checksums) --[no]replicate-check 在完成每个表后,检查复制是否存在数据差异(默认为 yes) --replicate-check-only 仅检查复制是否一致,而不执行校验查询 --replicate-check-retries=i 当遇到差异时,重试校验比较此次数(默认为 1) --replicate-database=s 仅使用此数据库 --resume 从上次完成的块继续校验(禁用 --[no]empty-replicate-table) --retries=i 当遇到非致命错误时,重试此次数(默认为 2) --run-time=m 运行时间,可选的后缀 s=秒,m=分钟,h=小时,d=天;如果没有后缀,默认为 s --separator=s 用于 CONCAT_WS() 的分隔符字符(默认为 #) --skip-check-slave-lag=d 跳过检查从库延迟的 DSN --slave-password=s 设置用于连接到从库的密码 --slave-skip-tolerance=f 当一个主表标记为仅在一个块中进行校验,但从库表超过此的最大接受大小时,跳过此表(默认为 1.0) --slave-user=s 设置用于连接到从库的用户 --trim 对 VARCHAR 列添加 TRIM()(在比较 4.1 和 >= 5.0 时有帮助) --truncate-replicate-table 在开始校验之前截断复制表 --[no]version-check 检查最新版本的 Percona Toolkit、MySQL 和其他程序(默认为 yes) --where=s 仅执行匹配此 WHERE 子句的行 Config: --config=A 读取此逗号分隔的配置文件列表;如果指定,必须作为命令行的第一个选项 Connection: --ask-pass 连接到 MySQL 时提示输入密码 --defaults-file=s -F 仅从给定文件中读取 MySQL 选项 --host=s -h 要连接的主机(默认为 localhost) --password=s -p 连接时使用的密码 --port=i -P 连接使用的端口号 --set-vars=A 设置这些 MySQL 变量的值,以逗号分隔的变量=值对 --socket=s -S 使用的连接套接字文件 --user=s -u 如果不是当前用户,则登录使用的用户 Filter: --columns=a -c 仅校验此逗号分隔的列 --databases=h -d 仅校验此逗号分隔的数据库 --databases-regex=s 仅校验数据库名称与此 Perl 正则表达式匹配的数据库 --engines=h -e 仅校验使用这些存储引擎的表 --ignore-columns=H 在计算校验和时忽略此逗号分隔的列 --ignore-databases=H 忽略此逗号分隔的数据库 --ignore-databases-regex=s 忽略名称与此 Perl 正则表达式匹配的数据库 --ignore-engines=H 忽略此逗号分隔的存储引擎(默认为 FEDERATED,MRG_MyISAM) --ignore-tables=H 忽略此逗号分隔的表 --ignore-tables-regex=s 忽略名称与此 Perl 正则表达式匹配的表 --tables=h -t 仅校验此逗号分隔的表 --tables-regex=s 仅校验名称与此 Perl 正则表达式匹配的表1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.

示例:

复制pt-table-checksum --user=username --password=password1. 35.pt-table-sync

作用:同步MySQL表的数据,以修复复制中的数据差异。

参数:

复制--algorithms=s 比较表时使用的算法优先级顺序(默认为 Chunk,Nibble,GroupBy,Stream) --ask-pass 连接到 MySQL 时提示输入密码 --bidirectional 启用第一个和后续主机之间的双向同步 --[no]bin-log 记录到二进制日志(SET SQL_LOG_BIN=1)(默认为 yes) --buffer-in-mysql 指示 MySQL 在其内存中缓冲查询 --[no]buffer-to-client 在比较时逐行从 MySQL 获取行(默认为 yes) --channel=s 连接到使用复制通道的服务器时的通道名称 --charset=s -A 默认字符集 --[no]check-child-tables 检查 --execute 是否会对子表产生不利影响(默认为 yes) --[no]check-master 使用 --sync-to-master 时,尝试验证检测到的主服务器是否真正是主服务器(默认为 yes) --[no]check-slave 检查目标服务器是否为从服务器(默认为 yes) --[no]check-triggers 检查目标表上是否定义了触发器(默认为 yes) --chunk-column=s 使用此列对表进行分块 --chunk-index=s 使用此索引对表进行分块 --chunk-size=s 每个分块的行数或数据大小(默认为 1000) --columns=a -c 仅比较此逗号分隔的列 --config=A 读取此逗号分隔的配置文件列表;如果指定,必须作为命令行的第一个选项 --conflict-column=s 在双向同步期间,当行冲突时比较此列 --conflict-comparison=s 选择具有此属性的 --conflict-column 作为源 --conflict-error=s 如何报告无法解决的冲突和冲突错误(默认为 warn) --conflict-threshold=s 一个 --conflict-column 必须超过另一个的量 --conflict-value=s 对于某些 --conflict-comparison,使用此值 --databases=h -d 仅同步此逗号分隔的数据库 --defaults-file=s -F 仅从给定文件中读取 MySQL 选项 --dry-run 分析,确定要使用的同步算法,打印并退出 --engines=h -e 仅同步使用此逗号分隔的存储引擎的表 --execute 执行查询以使表具有相同的数据 --explain-hosts 打印连接信息并退出 --float-precision=i FLOAT 和 DOUBLE 数字到字符串转换的精度 --[no]foreign-key-checks 启用外键检查(SET FOREIGN_KEY_CHECKS=1)(默认为 yes) --function=s 用于校验和的哈希函数 --help 显示帮助信息并退出 --[no]hex-blob HEX() BLOB、TEXT 和 BINARY 列(默认为 yes) --host=s -h 要连接的主机 --ignore-columns=H 在比较中忽略此逗号分隔的列名 --ignore-databases=H 忽略此逗号分隔的数据库 --ignore-engines=H 忽略此逗号分隔的存储引擎(默认为 FEDERATED,MRG_MyISAM) --ignore-tables=H 忽略此逗号分隔的表 --[no]index-hint 在分块和行查询中添加 FORCE/USE INDEX 提示(默认为 yes) --lock=i 锁定表:0=无,1=每个同步周期,2=每个表,3=全局 --lock-and-rename 锁定源和目标表,同步后交换名称 --password=s -p 连接时使用的密码 --pid=s 创建指定的 PID 文件 --port=i -P 连接使用的端口号 --print 打印解决差异的查询 --recursion-method=a 用于查找从服务器的首选递归方法(默认为 processlist,hosts) --replace 将所有 INSERT 和 UPDATE 语句写为 REPLACE --replicate=s 同步在此表中列出为不同的表 --set-vars=A 设置此逗号分隔的变量=值对的 MySQL 变量 --slave-password=s 设置用于连接到从服务器的密码 --slave-user=s 设置用于连接到从服务器的用户 --socket=s -S 使用的连接套接字文件 --sync-to-master 将 DSN 视为从服务器,并将其同步到其主服务器 --tables=h -t 仅同步此逗号分隔的表 --timeout-ok 如果 --wait 失败,则继续 --[no]transaction 使用事务而不是 LOCK TABLES --trim 在 BIT_XOR 和 ACCUM 模式下 TRIM() VARCHAR 列 --[no]unique-checks 启用唯一键检查(SET UNIQUE_CHECKS=1)(默认为 yes) --user=s -u 如果不是当前用户,则登录使用的用户 --verbose -v 打印同步操作的结果 --version 显示版本信息并退出 --[no]version-check 检查最新版本的 Percona Toolkit、MySQL 和其他程序(默认为 yes) --wait=m -w 等待从服务器追上它们的主服务器的时间。可选的后缀 s=秒,m=分钟,h=小时,d=天;如果没有后缀,默认为 s --where=s WHERE 子句,用于将同步限制为表的一部分 --[no]zero-chunk 添加一个用于具有零或等效于零值的行的分块(默认为 yes)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.

示例:

复制pt-table-sync --user=username --password=password1. 36.pt-table-usage

作用:分析MySQL查询日志以报告表的使用情况。

示例:

复制pt-table-usage --user=username --password=password slow.log1. 37.pt-upgrade

作用:分析MySQL查询日志以检测升级到新版本后的潜在问题。

示例:

复制pt-upgrade --user=username --password=password /path/to/slow.log1. 38.pt-variable-advisor

作用:检查MySQL服务器的变量设置,并给出优化建议。

示例:

复制pt-variable-advisor --user=username --password=password1. 39.pt-visual-explain

作用:生成MySQL查询计划的可视化解释。

示例:

复制pt-visual-explain "SELECT * FROM users WHERE id = 1"1.

注意事项

安全性:使用工具时需谨慎,避免对生产环境造成负面影响。版本兼容性:确保工具版本与MySQL版本兼容。配置文件:使用配置文件能够方便地管理和调整参数。

总结

Percona Toolkit工具集是管理和优化MySQL和MariaDB数据库的强大工具,能够帮助数据库管理员和开发人员提升工作效率,优化数据库性能,确保数据的完整性和一致性。通过本文的介绍和解析,相信你能更全面地理解和应用这些工具,从而更好地管理和维护数据库系统。

作者介绍

吴守阳,51CTO社区编辑,拥有8年DBA工作经验,熟练管理MySQL、Redis、MongoDB等开源数据库。精通性能优化、备份恢复和高可用性架构设计。善于故障排除和自动化运维,保障系统稳定可靠。具备良好的团队合作和沟通能力,致力于为企业提供高效可靠的数据库解决方案。

分享到:

温馨提示:以上内容和图片整理于网络,仅供参考,希望对您有帮助!如有侵权行为请联系删除!

友情链接: