暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Percona Toolkit

D 2024-09-10
157

介绍

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

主要功能和用途

性能优化和分析:

l使用pt-query-digest分析慢查询,优化数据库性能。

l使用pt-index-usage检查和优化索引的使用情况。

数据归档:

l使用pt-archiver归档和清理历史数据。

数据同步和比较:

l使用pt-table-checksum检查表之间的数据一致性。

l使用pt-table-sync在
数据库服务
器之间同步表数据。

Schema变更:

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

实用工具:

MySQL:

l使用pt-config-diff比较MySQL配置文件的不同之处。

l使用pt-mysql-summary生成MySQL服务器的摘要信息,方便日常管理和监控

MongoDB:

l使用pt-mongodb-index-check检查MongoDB中的索引并报告不必要的索引

l使用pt-mongodb-summary提供MongoDB服务器的摘要信息。

PGSQL:

l使用pt-pg-summary提供PostgreSQL服务器的摘要信息。

K8S:

l使用pt-k8s-debug-collector收集Kubernetes集群的调试信息。

PT工具

pt-align

**代码语言:**javascript

复制

作用:

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

示例:

echo -e "col1 col2\nval1 val2" | pt-align

pt-archiver

**代码语言:**javascript

复制

作用:从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.将表中小于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

2.将表中小于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 --purge --check-columns --analyze=ds --limit=10000 --statistics

3.用于把数据导出文件,不用删除原表中数据

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

4.将表中小于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

5.将表中6个月前的数据归档

pt-archiver --source h=host,D=db,t=table --dest h=host,D=db,t=archive_table --where "created < NOW() - INTERVAL 6 MONTH"

pt-config-diff

**代码语言:**javascript

复制

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

示例:

pt-config-diff /etc/my.cnf /etc/mysql/my.cnf

pt-deadlock-logger

**代码语言:**javascript

复制

作用:记录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)

示例:

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=deadlocks

pt-diskstats

**代码语言:**javascript

复制

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

示例:

pt-diskstats --devices sda,sdb --interval 1

pt-duplicate-key-checker

**代码语言:**javascript

复制

作用:查找和报告重复的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)

示例:

pt-duplicate-key-checker --user=username --password=password

pt-fifo-split

**代码语言:**javascript

复制

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

示例:

pt-fifo-split --lines 1000 input.txt

pt-find

**代码语言:**javascript

复制

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

示例:

pt-find --user=username --password=password --database=db --engine=InnoDB

pt-fingerprint

**代码语言:**javascript

复制

作用:将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 fingerprint

示例:

pt-fingerprint --query="SELECT * FROM users WHERE id = 123 AND username = 'johndoe';"

输出:SELECT * FROM users WHERE id = ? AND username = ?;

pt-fk-error-logger

**代码语言:**javascript

复制

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

示例:

pt-fk-error-logger --user=username --password=password

pt-galera-log-explainer

**代码语言:**javascript

复制

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

示例:

pt-galera-log-explainer --file /path/to/galera.log

pt-heartbeat

**代码语言:**javascript

复制

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

示例:

pt-heartbeat --update --database=test --table=heartbeat --interval=1 --user=username \--password=password

pt-index-usage

**代码语言:**javascript

复制

作用:分析和报告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 和其他程序的最新版本(默认是)

示例:

pt-index-usage --user=username --password=password --database=db slow.log

pt-ioprofile

**代码语言:**javascript

复制

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

示例:

pt-ioprofile --pid 1234

pt-k8s-debug-collector

**代码语言:**javascript

复制

作用:收集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 和其他程序的最新版本(默认是)

示例:

pt-k8s-debug-collector --namespace default

pt-kill

**代码语言:**javascript

复制

作用:查找并终止符合条件的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

操作:

-–execute-command=s当查询匹配时执行此命令

-–fingerprint修改--print行为,强制显示查询指纹而不是原始查询

-–kill杀死匹配查询的连接

-–kill-query杀死匹配查询

-–print打印匹配查询的KILL语句;不实际杀死查询

类匹配:

-–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如果类中至少有这么多查询,则匹配查询类

查询匹配:

-–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快照的文件,以测试匹配选项

示例:

pt-kill --busy-time 60 --user=username --password=password

kill

pt-kill --host=192.0.0.1 --user=root --password=123456 --busy-time 500 --match- command Query --victims all --daemonize --kill --interval 10 --log=sql.log

print

pt-kill --host=192.0.0.1 --user=root --password=123456 --busy-time 500 --match- command Query --victims all --daemonize --print --log=sql.log

pt-mext

**代码语言:**javascript

复制

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

示例:

pt-mext /path/to/module.pm

pt-mongodb-index-check

**代码语言:**javascript

复制

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

参数:

--h, --help显示上下文相关的帮助信息

-–version显示版本信息

-–all-databases检查所有数据库(不包括系统数据库)

-–databases=DATABASES,…要检查的数据库列表,用逗号分隔

-–all-collections检查选定数据库中的所有集合

-–collections=COLLECTIONS,…要检查的集合列表,用逗号分隔

-–mongodb.uri=mongodb://host:port/admindb?options连接URI

-–json以JSON格式显示输出

示例:

pt-mongodb-index-check --uri mongodb://localhost:27017

pt-mongodb-query-digest

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

示例:

pt-mongodb-query-digest /path/to/mongodb.log

pt-mongodb-summary

**代码语言:**javascript

复制

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

示例:

pt-mongodb-summary --uri mongodb://localhost:27017

pt-mysql-summary

**代码语言:**javascript

复制

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

示例:

pt-mysql-summary --user=username --password=password

pt-online-schema-change

**代码语言:**javascript

复制

作用:在线修改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 和其他程序的最新版本(默认是)

示例:

pt-online-schema-change --user=username --password=password --alter "ADD COLUMN new_col INT" D=db,t=table

在线添加删除mysql索引、字段(不锁表)

pt-online-schema-change -uroot -hlocalhost -p123 -S /tmp/mysql.sock --charset utf8 --alter='add column name char(4)' --execute D=test,t=user

在线增加索引,不锁表

pt-online-schema-change -uroot -hlocalhost -p123 -S /tmp/mysql.sock --charset utf8 --alter='add index user_id(u_id,g_id)' --execute D=test,t=user

在线删除索引,不锁表

pt-online-schema-change -uroot -hlocalhost -p123 -S /tmp/mysql.sock --charset utf8 --alter='idx_room_id' --execute D=test,t=user

在线删除字段,不锁表

pt-online-schema-change -uroot -hlocalhost -p123 -S /tmp/mysql.sock --charset utf8 --alter='drop column name' --execute D=test,t=user

在线修改表字段长度

./pt-online-schema-change --alter="modify SYL decimal(8,6) DEFAULT NULL COMMENT 'K(年) 原 远期的K年 (修改成收益率%)'" -uroot -p1234 D=d999,t=qx_step_yield --charset =utf8mb4 --execute

pt-pg-summary

**代码语言:**javascript

复制

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

示例:

pt-pg-summary

pt-pmp

**代码语言:**javascript

复制

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

示例:

pt-pmp --pid 1234

pt-query-digest

**代码语言:**javascript

复制

作用:分析和汇总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" );忽略所有其他服务器

```

示例:

a) pt-query-digest分析慢查询日志

shell> pt-query-digest --report slow.log

b) 报告最近半个小时的慢查询:

shell> pt-query-digest --report --since 1800s slow.log

c) 报告一个时间段的慢查询:

shell> pt-query-digest --report --since '2013-02-10 21:48:59' --until '2013-02-16 02:33:50' slow.log

d) 报告只含select语句的慢查询:

shell> pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' slow.log

e) 报告针对某个用户的慢查询:

shell> pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' slow.log

f) 报告所有的全表扫描或full join的慢查询:

shell> pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") || (($event->{Full_join} || "") eq "yes")' slow.log

g) 把查询保存到query_review表

shell> pt-query-digest --user=root –password=abc123 --review h=localhost,D=test ,t=query_review

--create-review-table slow.log

h) 把查询保存到query_history表

shell> pt-query-digest --user=root –password=abc123 --history h=localhost,D=test ,t=query_history

--create-history-table slow.log

i) 通过tcpdump抓取mysql的tcp协议数据,然后再分析

shell> tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt

shell> pt-query-digest --type tcpdump mysql.tcp.txt> slow_report.log

j) 分析binlog

shell> mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql

shell> pt-query-digest --type=binlog mysql-bin000093.sql > slow_report.log

k) 分析general log

shell> pt-query-digest --type=genlog localhost.log > slow_report.log

l) 前20个最慢查询(在里面用--limit标示)

pt-query-digest --report --limit 20 /root/1/10.22.179.48mysql-slow.log >1.sql

pt-secure-collect

**代码语言:**javascript

复制

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

示例:

pt-secure-collect --user=username --password=password

pt-show-grants

**代码语言:**javascript

复制

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

示例:

pt-show-grants --user=username --password=password

pt-sift

**代码语言:**javascript

复制

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

示例:

pt-sift --user=username --password=password

pt-slave-delay

**代码语言:**javascript

复制

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

示例:

pt-slave-delay --delay 1h --user=username --password=password

pt-slave-find

**代码语言:**javascript

复制

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

示例:

pt-slave-find --user=username --password=password

pt-slave-restart

**代码语言:**javascript

复制

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

示例:

pt-slave-restart --user=username --password=password

pt-stalk

**代码语言:**javascript

复制

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

示例:

pt-stalk --user=username --password=password

pt-summary

**代码语言:**javascript

复制

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

示例:

pt-summary

pt-table-checksum

**代码语言:**javascript

复制

作用:生成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 正则表达式匹配的表

示例:

pt-table-checksum --set-vars innodb_lock_wait_timeout=120 -umss -pmssss -h192 .168.10.10 -P3306 --recursion-method=processlist --no-check-binlog-format --quiet

pt-table-sync

**代码语言:**javascript

复制

作用:同步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)

示例:

输出不一致的数据(h144:主、h142:从)

pt-table-sync --replicate=percona.checksums h=192.168.10.144,u=mss,p=mss h=192.168.10.142 ,u=mss,p=mssss --port 3306 --print

修复

pt-table-sync --replicate=percona.checksums h=192.168.10.144,u=mss,p=msssss h=192.168.10.142 ,u=mss,p=mssss --port 3306 --print --execute

pt-table-usage

**代码语言:**javascript

复制

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

示例:

pt-table-usage --user=username --password=password slow.log

pt-upgrade

**代码语言:**javascript

复制

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

示例:

pt-upgrade --user=username --password=password /path/to/slow.log

pt-variable-advisor

**代码语言:**javascript

复制

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

示例:

pt-variable-advisor --user=username --password=password

pt-visual-explain

**代码语言:**javascript

复制

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

示例:

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

注意事项

l安全性:使用工具时需谨慎,避免对生产环境造成负面影响。

l版本兼容性:确保工具版本与MySQL版本兼容。

l配置文件:使用配置文件能够方便地管理和调整参数。

总结

 Percona

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

最后修改时间:2024-09-10 12:27:02
文章转载自D,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论