作者 | 吳守陽(yáng)
審校 | 重樓
介紹
Percona Toolkit是一套專業(yè)的MySQL和MariaDB數(shù)據(jù)庫(kù)管理工具,涵蓋了從性能優(yōu)化到數(shù)據(jù)同步和備份恢復(fù)的多個(gè)方面。本文將深入探討Percona Toolkit工具集的核心功能和使用場(chǎng)景,幫助你更好地理解和利用這些強(qiáng)大的數(shù)據(jù)庫(kù)工具。
主要功能和用途
性能優(yōu)化和分析:
- 使用pt-query-digest分析慢查詢,優(yōu)化數(shù)據(jù)庫(kù)性能。
- 使用pt-index-usage檢查和優(yōu)化索引的使用情況。
數(shù)據(jù)歸檔:
- 使用pt-archiver歸檔和清理歷史數(shù)據(jù)。
數(shù)據(jù)同步和比較:
- 使用pt-table-checksum檢查表之間的數(shù)據(jù)一致性。
- 使用pt-table-sync在數(shù)據(jù)庫(kù)服務(wù)器之間同步表數(shù)據(jù)。
Schema變更:
- 使用pt-online-schema-change在線執(zhí)行表結(jié)構(gòu)更改,避免表鎖定問題。
實(shí)用工具:
- 使用pt-config-diff比較MySQL配置文件的不同之處。
- 使用pt-mysql-summary生成MySQL服務(wù)器的摘要信息,方便日常管理和監(jiān)控。
Percona Toolkit工具
1.pt-align
作用:對(duì)齊查詢輸出,方便人們閱讀和分析。
示例:
echo -e "col1 col2\nval1 val2" | pt-align
2.pt-archiver
作用:從MySQL表中歸檔舊數(shù)據(jù),以保持表的高性能。
參數(shù):
--limit10000 每次取1000行數(shù)據(jù)用pt-archive處理
--txn-size 1000 設(shè)置1000行為一個(gè)事務(wù)提交一次
--where‘id<3000‘ 設(shè)置操作條件
--progress5000 每處理5000行輸出一次處理信息
--statistics 輸出執(zhí)行過程及最后的操作統(tǒng)計(jì)。(只要不加上--quiet,默認(rèn)情況下pt-archive都會(huì)輸出執(zhí)行過程的)
--charset=UTF8 指定字符集為UTF8
--bulk-delete 批量刪除source上的舊數(shù)據(jù)(例如每次1000行的批量刪除操作)
--bulk-insert 批量插入數(shù)據(jù)到dest主機(jī) (看dest的general log發(fā)現(xiàn)它是通過在dest主機(jī)上LOAD DATA LOCAL INFILE插入數(shù)據(jù)的)
--replace 將insert into 語(yǔ)句改成replace寫入到dest庫(kù)
--sleep120 每次歸檔了limit個(gè)行記錄后的休眠120秒(單位為秒)
--file‘/root/test.txt‘
--purge 刪除source數(shù)據(jù)庫(kù)的相關(guān)匹配記錄
--header 輸入列名稱到首行(和--file一起使用)
--no-check-charset 不指定字符集
--check-columns 檢驗(yàn)dest和source的表結(jié)構(gòu)是否一致,不一致自動(dòng)拒絕執(zhí)行(不加這個(gè)參數(shù)也行。默認(rèn)就是執(zhí)行檢查的)
--no-check-columns 不檢驗(yàn)dest和source的表結(jié)構(gòu)是否一致,不一致也執(zhí)行(會(huì)導(dǎo)致dest上的無法與source匹配的列值被置為null或者0)
--chekc-interval 默認(rèn)1s檢查一次
--local 不把optimize或analyze操作寫入到binlog里面(防止造成主從延遲巨大)
--retries 超時(shí)或者出現(xiàn)死鎖的話,pt-archiver進(jìn)行重試的間隔(默認(rèn)1s)
--no-version-check 目前為止,發(fā)現(xiàn)部分pt工具對(duì)阿里云RDS操作必須加這個(gè)參數(shù)
--analyze=ds 操作結(jié)束后,優(yōu)化表空間(d表示dest,s表示source)
--no-delete 表示不刪除原來的數(shù)據(jù),注意:如果不指定此參數(shù),所有處理完成后,都會(huì)清理原表中的數(shù)據(jù)
示例:
- 將表中小于2018-07-01時(shí)間的數(shù)據(jù)進(jìn)行歸檔,不刪除原表記錄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時(shí)間的數(shù)據(jù)進(jìn)行歸檔,刪除原表記錄,優(yōu)化表空間(因?yàn)檫@種操作費(fèi)時(shí)間,并且需要你提前預(yù)估有足夠的磁盤空間用于拷貝表)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
- 用于把數(shù)據(jù)導(dǎo)出文件,不用刪除原表中數(shù)據(jù) 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時(shí)間的數(shù)據(jù)進(jìn)行歸檔,每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個(gè)月前的數(shù)據(jù)歸檔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
作用:比較兩個(gè)MySQL配置文件并顯示差異。
示例:
pt-config-diff /etc/my.cnf /etc/mysql/my.cnf
4.pt-deadlock-logger
作用:記錄MySQL中的死鎖事件。
參數(shù):
--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
5.pt-diskstats
作用:收集和顯示磁盤I/O統(tǒng)計(jì)信息。
示例:
pt-diskstats --devices sda,sdb --interval 1
6.pt-duplicate-key-checker
作用:查找和報(bào)告重復(fù)的MySQL索引。
參數(shù):
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
7.pt-fifo-split
作用:將輸入文件分割成多個(gè)文件,并按FIFO順序處理。
示例:
pt-fifo-split --lines 1000 input.txt
8.pt-find
作用:查找和列出符合條件的MySQL表。
示例:
pt-find --user=username --password=password --database=db --engine=InnoDB
9.pt-fingerprint
作用:將SQL查詢規(guī)范化為指紋形式,以便對(duì)類似查詢進(jìn)行分組和統(tǒng)計(jì)。
參數(shù):
--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 = ?;
10.pt-fk-error-logger
作用:記錄MySQL中的外鍵錯(cuò)誤。
示例:
pt-fk-error-logger --user=username --password=password
11.pt-galera-log-explainer
作用:分析和解釋Galera Cluster的日志文件。
示例:
pt-galera-log-explainer --file /path/to/galera.log
12.pt-heartbeat
作用:監(jiān)控和報(bào)告MySQL復(fù)制延遲。
示例:
pt-heartbeat --update --database=test --table=heartbeat --interval=1 --user=username --password=password
13.pt-index-usage
作用:分析和報(bào)告MySQL表的索引使用情況。
參數(shù):
--ask-pass 連接到 MySQL 時(shí)提示輸入密碼
--charset=s -A 默認(rèn)字符集
--config=A 讀取這個(gè)逗號(hào)分隔的配置文件列表;如果指定此選項(xiàng),它必須是命令行上的第一個(gè)選項(xiàng)
--create-save-results-database 如果 --save-results-database 不存在,則創(chuàng)建它
--[no]create-views 為 --save-results-database 示例查詢創(chuàng)建視圖
--database=s -D 連接到的數(shù)據(jù)庫(kù)
--databases=h -d 只從這個(gè)逗號(hào)分隔的數(shù)據(jù)庫(kù)列表中獲取表和索引
--databases-regex=s 只從名稱匹配這個(gè) Perl 正則表達(dá)式的數(shù)據(jù)庫(kù)中獲取表和索引
--defaults-file=s -F 只從指定的文件中讀取 MySQL 選項(xiàng)
--drop=H 僅建議刪除這些類型的未使用索引(默認(rèn)非唯一)
--empty-save-results-tables 刪除并重新創(chuàng)建 --save-results-database 中所有已存在的表
--help 顯示幫助信息并退出
--host=s -h 連接到的主機(jī)
--ignore-databases=H 忽略這個(gè)逗號(hào)分隔的數(shù)據(jù)庫(kù)列表
--ignore-databases-regex=s 忽略名稱匹配這個(gè) Perl 正則表達(dá)式的數(shù)據(jù)庫(kù)
--ignore-tables=H 忽略這個(gè)逗號(hào)分隔的表名列表
--ignore-tables-regex=s 忽略名稱匹配這個(gè) Perl 正則表達(dá)式的表
--password=s -p 連接時(shí)使用的密碼
--port=i -P 連接使用的端口號(hào)
--progress=a 將進(jìn)度報(bào)告打印到 STDERR(默認(rèn) time,30)
--quiet -q 不打印任何警告
--[no]report 打印 --report-format 的報(bào)告(默認(rèn)是)
--report-format=A 目前只有一個(gè)報(bào)告:drop_unused_indexes(默認(rèn) drop_unused_indexes)
--save-results-database=d 將結(jié)果保存到這個(gè)數(shù)據(jù)庫(kù)的表中
--set-vars=A 在這個(gè)逗號(hào)分隔的變量=值列表中設(shè)置 MySQL 變量
--socket=s -S 連接使用的套接字文件
--tables=h -t 只從這個(gè)逗號(hào)分隔的表列表中獲取索引
--tables-regex=s 只從名稱匹配這個(gè) Perl 正則表達(dá)式的表中獲取索引
--user=s -u 登錄時(shí)使用的用戶,如果不是當(dāng)前用戶
--version 顯示版本信息并退出
--[no]version-check 檢查 Percona Toolkit、MySQL 和其他程序的最新版本(默認(rèn)是)
示例:
pt-index-usage --user=username --password=password --database=db slow.log
14.pt-ioprofile
作用:記錄并顯示進(jìn)程的I/O活動(dòng)。
示例:
pt-ioprofile --pid 1234
15.pt-k8s-debug-collector
作用:收集Kubernetes集群的調(diào)試信息。
參數(shù):
--ask-pass 連接到 MySQL 時(shí)提示輸入密碼
--charset=s -A 默認(rèn)字符集
--config=A 讀取這個(gè)逗號(hào)分隔的配置文件列表;如果指定此選項(xiàng),它必須是命令行上的第一個(gè)選項(xiàng)
--create-save-results-database 如果 --save-results-database 不存在,則創(chuàng)建它
--[no]create-views 為 --save-results-database 示例查詢創(chuàng)建視圖
--database=s -D 連接到的數(shù)據(jù)庫(kù)
--databases=h -d 只從這個(gè)逗號(hào)分隔的數(shù)據(jù)庫(kù)列表中獲取表和索引
--databases-regex=s 只從名稱匹配這個(gè) Perl 正則表達(dá)式的數(shù)據(jù)庫(kù)中獲取表和索引
--defaults-file=s -F 只從指定的文件中讀取 MySQL 選項(xiàng)
--drop=H 僅建議刪除這些類型的未使用索引(默認(rèn)非唯一)
--empty-save-results-tables 刪除并重新創(chuàng)建 --save-results-database 中所有已存在的表
--help 顯示幫助信息并退出
--host=s -h 連接到的主機(jī)
--ignore-databases=H 忽略這個(gè)逗號(hào)分隔的數(shù)據(jù)庫(kù)列表
--ignore-databases-regex=s 忽略名稱匹配這個(gè) Perl 正則表達(dá)式的數(shù)據(jù)庫(kù)
--ignore-tables=H 忽略這個(gè)逗號(hào)分隔的表名列表
--ignore-tables-regex=s 忽略名稱匹配這個(gè) Perl 正則表達(dá)式的表
--password=s -p 連接時(shí)使用的密碼
--port=i -P 連接使用的端口號(hào)
--progress=a 將進(jìn)度報(bào)告打印到 STDERR(默認(rèn) time,30)
--quiet -q 不打印任何警告
--[no]report 打印 --report-format 的報(bào)告(默認(rèn)是)
--report-format=A 目前只有一個(gè)報(bào)告:drop_unused_indexes(默認(rèn) drop_unused_indexes)
--save-results-database=d 將結(jié)果保存到這個(gè)數(shù)據(jù)庫(kù)的表中
--set-vars=A 在這個(gè)逗號(hào)分隔的變量=值列表中設(shè)置 MySQL 變量
--socket=s -S 連接使用的套接字文件
--tables=h -t 只從這個(gè)逗號(hào)分隔的表列表中獲取索引
--tables-regex=s 只從名稱匹配這個(gè) Perl 正則表達(dá)式的表中獲取索引
--user=s -u 登錄時(shí)使用的用戶,如果不是當(dāng)前用戶
--version 顯示版本信息并退出
--[no]version-check 檢查 Percona Toolkit、MySQL 和其他程序的最新版本(默認(rèn)是)
示例:
pt-k8s-debug-collector --namespace default
16.pt-kill
作用:查找并終止符合條件的MySQL會(huì)話。
參數(shù):
- `--ask-pass` 連接到MySQL時(shí)提示輸入密碼
- `--charset=s -A` 默認(rèn)字符集
- `--config=A` 讀取這個(gè)以逗號(hào)分隔的配置文件列表;如果指定,這必須是命令行上的第一個(gè)選項(xiàng)
- `--create-log-table` 如果不存在,創(chuàng)建--log-dsn表
- `--daemonize` 后臺(tái)運(yùn)行并從shell分離
- `--database=s -D` 用于連接的數(shù)據(jù)庫(kù)
- `--defaults-file=s -F` 僅從指定文件讀取MySQL選項(xiàng)
- `--filter=s` 丟棄該P(yáng)erl代碼未返回true的事件
- `--group-by=s` 將匹配應(yīng)用于按此SHOW PROCESSLIST列分組的每類查詢
- `--help` 顯示幫助并退出
- `--host=s -h` 連接到主機(jī)(默認(rèn)localhost)
- `--interval=m` 檢查要?dú)⑺赖牟樵兊念l率??蛇x后綴s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用s
- `--json` 以JSON格式打印已殺死的查詢,必須與--print一起使用
- `--json-fields=s` 指定在使用--json時(shí)要包含在JSON輸出中的額外鍵值對(duì)列表,參數(shù)值的格式必須為:
- `--kill-busy-commands=s` 組:操作(默認(rèn)Query)
- `--log=s` 在后臺(tái)運(yùn)行時(shí)將所有輸出打印到該文件
- `--log-dsn=d` 將每個(gè)被殺死的查詢存儲(chǔ)在此DSN中
- `--password=s -p` 連接時(shí)使用的密碼
- `--pid=s` 創(chuàng)建給定的PID文件
- `--port=i -P` 用于連接的端口號(hào)
- `--query-id` 打印剛被殺死的查詢的ID
- `--rds` 表示問題實(shí)例位于Amazon RDS上
- `--run-time=m` 運(yùn)行多長(zhǎng)時(shí)間后退出。可選后綴s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用s
- `--sentinel=s` 如果此文件存在則退出(默認(rèn)/tmp/pt-kill-sentinel)
- `--set-vars=A` 在這個(gè)以逗號(hào)分隔的變量=值對(duì)列表中設(shè)置MySQL變量
- `--slave-password=s` 設(shè)置用于連接從庫(kù)的密碼
- `--slave-user=s` 設(shè)置用于連接從庫(kù)的用戶
- `--socket=s -S` 用于連接的套接字文件
- `--stop` 通過創(chuàng)建--sentinel文件停止運(yùn)行實(shí)例
- `--[no]strip-comments` 從PROCESSLIST的Info列中移除SQL注釋(默認(rèn)yes)
- `--user=s -u` 登錄用戶(如果不是當(dāng)前用戶)
- `--verbose -v` 打印正在執(zhí)行的操作信息到STDOUT
- `--version` 顯示版本并退出
- `--[no]version-check` 檢查Percona Toolkit、MySQL和其他程序的最新版本(默認(rèn)yes)
- `--victims=s` 每類匹配的查詢中將被殺死的查詢(默認(rèn)oldest)
- `--wait-after-kill=m` 殺死一個(gè)查詢后等待,然后再查找更多要?dú)⑺赖牟樵???蛇x后綴s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用s
- `--wait-before-kill=m` 殺死一個(gè)查詢前等待??蛇x后綴s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用s
操作:
- `--execute-command=s` 當(dāng)查詢匹配時(shí)執(zhí)行此命令
- `--fingerprint` 修改--print行為,強(qiáng)制顯示查詢指紋而不是原始查詢
- `--kill` 殺死匹配查詢的連接
- `--kill-query` 殺死匹配查詢
- `--print` 打印匹配查詢的KILL語(yǔ)句;不實(shí)際殺死查詢
類匹配:
- `--any-busy-time=m` 如果任何查詢運(yùn)行時(shí)間超過此時(shí)間,則匹配查詢類?!俺^”意味著如果您指定10秒,例如,只有在至少有一個(gè)查詢運(yùn)行時(shí)間超過10秒時(shí),類才會(huì)匹配??蛇x后綴s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用s
- `--each-busy-time=m` 如果每個(gè)查詢運(yùn)行時(shí)間超過此時(shí)間,則匹配查詢類?!俺^”意味著如果您指定10秒,例如,只有當(dāng)每個(gè)查詢運(yùn)行時(shí)間超過10秒時(shí),類才會(huì)匹配??蛇x后綴s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用s
- `--query-count=i` 如果類中至少有這么多查詢,則匹配查詢類
查詢匹配:
- `--busy-time=m` 匹配運(yùn)行時(shí)間超過此時(shí)間的查詢??蛇x后綴s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用s
- `--idle-time=m` 匹配空閑/睡眠時(shí)間超過此時(shí)間的查詢??蛇x后綴s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用s
- `--ignore-command=s` 忽略Command匹配此Perl正則表達(dá)式的查詢
- `--ignore-db=s` 忽略db(數(shù)據(jù)庫(kù))匹配此Perl正則表達(dá)式的查詢
- `--ignore-host=s` 忽略Host匹配此Perl正則表達(dá)式的查詢
- `--ignore-info=s` 忽略Info(查詢)匹配此Perl正則表達(dá)式的查詢
- `--[no]ignore-self` 不要?dú)⑺纏t-kill自己的連接(默認(rèn)yes)
- `--ignore-state=s` 忽略State匹配此Perl正則表達(dá)式的查詢(默認(rèn)Locked)
- `--ignore-user=s` 忽略User匹配此Perl正則表達(dá)式的查詢
- `--match-all` 匹配所有未被忽略的查詢
- `--match-command=s` 僅匹配Command匹配此Perl正則表達(dá)式的查詢
- `--match-db=s` 僅匹配db(數(shù)據(jù)庫(kù))匹配此Perl正則表達(dá)式的查詢
- `--match-host=s` 僅匹配Host匹配此Perl正則表達(dá)式的查詢
- `--match-info=s` 僅匹配Info(查詢)匹配此Perl正則表達(dá)式的查詢
- `--match-state=s` 僅匹配State匹配此Perl正則表達(dá)式的查詢
- `--match-user=s` 僅匹配User匹配此Perl正則表達(dá)式的查詢
- `--replication-threads` 允許匹配和殺死復(fù)制線程
- `--test-matching=a` 包含PROCESSLIST快照的文件,以測(cè)試匹配選項(xiàng)
示例:
pt-kill --busy-time 60 --user=username --password=password
17.pt-mext
作用:擴(kuò)展Percona Toolkit的功能,通過加載外部模塊。
示例:
pt-mext /path/to/module.pm
18.pt-mongodb-index-check
作用:檢查MongoDB中的索引并報(bào)告不必要的索引。
參數(shù):
- `-h, --help` 顯示上下文相關(guān)的幫助信息
- `--version` 顯示版本信息
- `--all-databases` 檢查所有數(shù)據(jù)庫(kù)(不包括系統(tǒng)數(shù)據(jù)庫(kù))
- `--databases=DATABASES,...` 要檢查的數(shù)據(jù)庫(kù)列表,用逗號(hào)分隔
- `--all-collections` 檢查選定數(shù)據(jù)庫(kù)中的所有集合
- `--collections=COLLECTIONS,...` 要檢查的集合列表,用逗號(hào)分隔
- `--mongodb.uri=mongodb://host:port/admindb?options` 連接URI
- `--json` 以JSON格式顯示輸出
示例:
pt-mongodb-index-check --uri mongodb://localhost:27017
19.pt-mongodb-query-digest
作用:分析和報(bào)告MongoDB查詢?nèi)罩尽?/span>
示例:
pt-mongodb-query-digest /path/to/mongodb.log
20.pt-mongodb-summary
作用:提供MongoDB服務(wù)器的摘要信息。
示例:
pt-mongodb-summary --uri mongodb://localhost:27017
21.pt-mysql-summary
作用:提供MySQL服務(wù)器的摘要信息。
示例:
pt-mysql-summary --user=username --password=password
22.pt-online-schema-change
作用:在線修改MySQL表的結(jié)構(gòu),而不會(huì)造成服務(wù)中斷。
參數(shù):
- `--alter=s` 進(jìn)行架構(gòu)修改,不包括 ALTER TABLE 關(guān)鍵字
- `--alter-foreign-keys-method=s` 修改外鍵引用新表的方法
- `--[no]analyze-before-swap` 在交換新舊表之前對(duì)新表執(zhí)行 ANALYZE TABLE(默認(rèn)是)
- `--ask-pass` 連接 MySQL 時(shí)提示輸入密碼
- `--channel=s` 使用復(fù)制通道連接服務(wù)器時(shí)使用的通道名稱
- `--charset=s, -A` 默認(rèn)字符集
- `--[no]check-alter` 解析指定的 --alter 并嘗試警告可能的意外行為(默認(rèn)是)
- `--[no]check-foreign-keys` 檢查自引用外鍵(默認(rèn)是)
- `--check-interval=m` 檢查 --max-lag 之間的休眠時(shí)間(默認(rèn) 1),可選后綴 s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用 s
- `--[no]check-plan` 檢查查詢執(zhí)行計(jì)劃的安全性(默認(rèn)是)
- `--[no]check-replication-filters` 如果在任何服務(wù)器上設(shè)置了任何復(fù)制過濾器,則中止(默認(rèn)是)
- `--check-slave-lag=s` 暫停數(shù)據(jù)復(fù)制,直到此副本的延遲小于 --max-lag
- `--[no]check-unique-key-change` 如果 --alter 指定的語(yǔ)句嘗試添加唯一索引,則避免 pt-online-schema-change 運(yùn)行(默認(rèn)是)
- `--chunk-index=s` 為塊表選擇優(yōu)先的索引
- `--chunk-index-columns=i` 使用 --chunk-index 的最多左列數(shù)
- `--chunk-size=z` 每個(gè)復(fù)制塊選擇的行數(shù)(默認(rèn) 1000)
- `--chunk-size-limit=f` 不要復(fù)制比期望塊大小大很多的塊(默認(rèn) 4.0)
- `--chunk-time=f` 動(dòng)態(tài)調(diào)整塊大小,以便每個(gè)數(shù)據(jù)復(fù)制查詢執(zhí)行時(shí)間為該值(默認(rèn) 0.5)
- `--config=A` 讀取此逗號(hào)分隔的配置文件列表;如果指定,則必須是命令行上的第一個(gè)選項(xiàng)
- `--critical-load=A` 在每個(gè)塊之后檢查 SHOW GLOBAL STATUS,并在負(fù)載過高時(shí)中止(默認(rèn) Threads_running=50)
- `--data-dir=s` 使用 DATA DIRECTORY 特性在不同分區(qū)上創(chuàng)建新表
- `--database=s, -D` 連接到此數(shù)據(jù)庫(kù)
- `--default-engine` 從新表中刪除 ENGINE
- `--defaults-file=s, -F` 僅從給定文件讀取 MySQL 選項(xiàng)
- `--[no]drop-new-table` 如果復(fù)制原始表失敗,則刪除新表(默認(rèn)是)
- `--[no]drop-old-table` 重命名原始表后刪除它(默認(rèn)是)
- `--[no]drop-triggers` 刪除舊表上的觸發(fā)器。--no-drop-triggers 強(qiáng)制 --no-drop-old-table(默認(rèn)是)
- `--dry-run` 創(chuàng)建并修改新表,但不創(chuàng)建觸發(fā)器、復(fù)制數(shù)據(jù)或替換原始表
- `--execute` 表明您已閱讀文檔并希望修改表
- `--[no]fail-on-stopped-replication` 如果復(fù)制停止,則失敗并顯示錯(cuò)誤(退出狀態(tài) 128),而不是等待復(fù)制重新啟動(dòng)(默認(rèn)是)
- `--force` 如果使用 alter-foreign-keys-method=none 可能會(huì)破壞外鍵約束,此選項(xiàng)將繞過確認(rèn)
- `--help` 顯示幫助并退出
- `--host=s, -h` 連接到主機(jī)
- `--max-flow-ctl=f` 類似于 --max-lag 但用于 PXC 集群
- `--max-lag=m` 暫停數(shù)據(jù)復(fù)制,直到所有副本的延遲小于此值(默認(rèn) 1s)。可選后綴 s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,則使用 s
- `--max-load=A` 在每個(gè)塊之后檢查 SHOW GLOBAL STATUS,并在任何狀態(tài)變量超過其閾值時(shí)暫停(默認(rèn) Threads_running=25)
- `--new-table-name=s` 在交換前的新表名稱。%T 替換為原始表名稱(默認(rèn) %T_new)
- `--null-to-not-null` 允許將允許 NULL 值的列修改為不允許 NULL 值的列
- `--only-same-schema-fks` 僅檢查與原始表位于同一模式的外鍵
- `--password=s, -p` 連接時(shí)使用的密碼
- `--pause-file=s` 當(dāng)指定的文件存在時(shí),執(zhí)行將暫停
- `--pid=s` 創(chuàng)建給定的 PID 文件
- `--plugin=s` 定義 pt_online_schema_change_plugin 類的 Perl 模塊文件
- `--port=i, -P` 使用的連接端口號(hào)
- `--preserve-triggers` 保留舊觸發(fā)器
- `--print` 將 SQL 語(yǔ)句打印到 STDOUT
- `--progress=a` 復(fù)制行時(shí)將進(jìn)度報(bào)告打印到 STDERR(默認(rèn) time,30)
- `--quiet, -q` 不打印消息到 STDOUT(禁用 --progress)
- `--recurse=i` 發(fā)現(xiàn)副本時(shí)遞歸的層次數(shù)
- `--recursion-method=a` 發(fā)現(xiàn)副本的首選遞歸方法(默認(rèn) processlist,hosts)
- `--remove-data-dir` 如果原始表是使用 DATA DIRECTORY 特性創(chuàng)建的,則刪除它,并在 MySQL 默認(rèn)目錄中創(chuàng)建新表而不創(chuàng)建新的 isl 文件(默認(rèn)否)
- `--reverse-triggers` 警告!此選項(xiàng)在開始復(fù)制之前在新表上創(chuàng)建反向觸發(fā)器
- `--set-vars=A` 在此逗號(hào)分隔的變量=值對(duì)列表中設(shè)置 MySQL 變量
- `--skip-check-slave-lag=d` 檢查從庫(kù)延遲時(shí)跳過的 DSN
- `--slave-password=s` 設(shè)置連接從庫(kù)時(shí)使用的密碼
- `--slave-user=s` 設(shè)置連接從庫(kù)時(shí)使用的用戶
- `--sleep=f` 復(fù)制每個(gè)塊后休眠的時(shí)間(以秒為單位)(默認(rèn) 0)
- `--socket=s, -S` 使用的連接套接字文件
- `--statistics` 打印內(nèi)部計(jì)數(shù)器的統(tǒng)計(jì)信息
- `--[no]swap-tables` 交換原始表和新的修改表(默認(rèn)是)
- `--tries=a` 嘗試關(guān)鍵操作的次數(shù)
- `--user=s, -u` 登錄用戶(如果不是當(dāng)前用戶)
- `--version` 顯示版本并退出
- `--[no]version-check` 檢查 Percona Toolkit、MySQL 和其他程序的最新版本(默認(rèn)是)
示例:
pt-online-schema-change --user=username --password=password --alter "ADD COLUMN new_col INT" D=db,t=table
23.pt-pg-summary
作用:提供PostgreSQL服務(wù)器的摘要信息。
示例:
pt-pg-summary
24.pt-pmp
作用:生成進(jìn)程的MySQL性能剖析報(bào)告。
示例:
pt-pmp --pid 1234
25.pt-query-digest
作用:分析和匯總MySQL查詢?nèi)罩?,以找出慢查詢和高?fù)載查詢。
參數(shù):
--ask-pass 提示輸入連接到MySQL時(shí)的密碼
--attribute-aliases=a 屬性|別名列表,默認(rèn)為 db|Schema
--attribute-value-limit=i 屬性值的合理限制,默認(rèn)為 0
--charset=s -A 默認(rèn)字符集
--config=A 讀取此逗號(hào)分隔的配置文件列表;如果指定,必須作為命令行的第一個(gè)選項(xiàng)
--[no]continue-on-error 即使出現(xiàn)錯(cuò)誤也繼續(xù)解析,默認(rèn)為 yes
--[no]create-history-table 如果不存在,則創(chuàng)建 --history 表,默認(rèn)為 yes
--[no]create-review-table 如果不存在,則創(chuàng)建 --review 表,默認(rèn)為 yes
--daemonize 后臺(tái)運(yùn)行并從 shell 中分離出來
--database=s -D 連接到此數(shù)據(jù)庫(kù)
--defaults-file=s -F 僅從給定文件中讀取 MySQL 選項(xiàng)
--embedded-attributes=a 兩個(gè) Perl 正則表達(dá)式模式,用于捕獲嵌入在查詢中的偽屬性
--expected-range=a 當(dāng)條目多于或少于預(yù)期時(shí)解釋條目,默認(rèn)為 5,10
--explain=d 使用此 DSN 運(yùn)行對(duì)示例查詢的 EXPLAIN 并打印結(jié)果
--filter=s 丟棄此 Perl 代碼返回 false 的事件
--group-by=A 按此屬性的事件分組,默認(rèn)為 fingerprint
--help 顯示幫助并退出
--history=d 保存每個(gè)查詢類的指標(biāo)到指定表中
--host=s -h 連接到此主機(jī)
--ignore-attributes=a 不聚合這些屬性,默認(rèn)為 arg, cmd, insert_id, ip, port, Thread_id, timestamp, exptime, flags, key, res, val, server_id, offset, end_log_pos, Xid
--inherit-attributes=a 如果丟失,則從最后一個(gè)擁有它們的事件繼承這些屬性,默認(rèn)為 db,ts
--interval=f 查詢進(jìn)程列表的輪詢頻率,單位為秒,默認(rèn)為 0.1
--iterations=i 循環(huán)收集和報(bào)告的次數(shù),默認(rèn)為 1
--limit=A 限制輸出到給定的百分比或計(jì)數(shù),默認(rèn)為 95%:20
--log=s 當(dāng)守護(hù)程序時(shí)將所有輸出打印到此文件
--max-hostname-length=i 在報(bào)告中截?cái)嘀鳈C(jī)名到此長(zhǎng)度,0=不截?cái)啵J(rèn)為 10
--max-line-length=i 在報(bào)告中截?cái)嘈械酱碎L(zhǎng)度,0=不截?cái)?,默認(rèn)為 74
--order-by=A 按此屬性和聚合函數(shù)排序事件,默認(rèn)為 Query_time:sum
--outliers=a 按屬性:百分位:計(jì)數(shù)報(bào)告異常值,默認(rèn)為 Query_time:1:10
--output=s 如何格式化和打印查詢分析結(jié)果,默認(rèn)為 report
--password=s -p 連接時(shí)使用的密碼
--pid=s 創(chuàng)建指定的 PID 文件
--port=i -P 連接使用的端口號(hào)
--preserve-embedded-numbers 在指紋查詢時(shí)保留數(shù)據(jù)庫(kù)/表名中的數(shù)字
--processlist=d 使用此 DSN 的進(jìn)程列表輪詢查詢,默認(rèn)間隔為 sleep
--progress=a 打印進(jìn)度報(bào)告到 STDERR,默認(rèn)為 time,30
--read-timeout=m 等待輸入事件的時(shí)間,默認(rèn)為 0,可選的后綴 s=秒,m=分鐘,h=小時(shí),d=天
--[no]report 打印每個(gè) --group-by 屬性的查詢分析報(bào)告,默認(rèn)為 yes
--report-all 報(bào)告所有查詢,甚至已經(jīng)審查過的
--report-format=A 打印查詢分析報(bào)告的這些部分,默認(rèn)為 rusage,date,hostname,files,header,profile,query_report,prepared
--report-histogram=s 繪制此屬性值的分布圖,默認(rèn)為 Query_time
--resume=s 如果指定,工具將上次的文件偏移量寫入指定的文件名
--review=d 保存查詢類以供稍后審查,并不報(bào)告已經(jīng)審查過的類
--run-time=m 每次迭代運(yùn)行的時(shí)間,默認(rèn)為時(shí)鐘,可選的后綴 s=秒,m=分鐘,h=小時(shí),d=天
--run-time-mode=s 設(shè)置 --run-time 操作的值,默認(rèn)為 clock
--sample=i 過濾每個(gè)查詢的前 N 個(gè)事件,默認(rèn)為 0
--set-vars=A 設(shè)置這些 MySQL 變量的值,以逗號(hào)分隔的變量=值對(duì)
--show-all=H 顯示這些屬性的所有值
--since=s 解析此日期之后的查詢,默認(rèn)為解析自此日期起的查詢
--slave-password=s 設(shè)置用于連接到從服務(wù)器的密碼
--slave-user=s 設(shè)置用于連接到從服務(wù)器的用戶
--socket=s -S 使用的連接套接字文件
--timeline 顯示事件的時(shí)間線
--type=A 解析的輸入類型,默認(rèn)為 slowlog
--until=s 解析此日期之前的查詢,默認(rèn)為解析直到此日期的查詢
--user=s -u 登錄時(shí)使用的用戶,如果不是當(dāng)前用戶
--variations=A 報(bào)告這些屬性值的變化數(shù)量
--version 顯示版本并退出
--[no]version-check 檢查 Percona Toolkit、MySQL 和其他程序的最新版本,默認(rèn)為 yes
--[no]vertical-format 在報(bào)告的 SQL 查詢中輸出一個(gè)尾隨 "\G",默認(rèn)為 yes
--watch-server=s 告訴 pt-query-digest 解析 tcpdump 時(shí)觀察的服務(wù)器 IP 地址和端口(例如 "10.0.0.1:3306");忽略所有其他服務(wù)器
```
示例:
pt-query-digest /path/to/slow.log
26.pt-secure-collect
作用:收集和報(bào)告MySQL的安全信息。
示例:
pt-secure-collect --user=username --password=password
27.pt-show-grants
作用:顯示MySQL用戶的權(quán)限。
示例:
pt-show-grants --user=username --password=password
28.pt-sift
作用:收集和分析MySQL服務(wù)器的性能數(shù)據(jù)。
示例:
pt-sift --user=username --password=password
29.pt-slave-delay
作用:延遲MySQL復(fù)制以創(chuàng)建時(shí)間點(diǎn)恢復(fù)的機(jī)會(huì)。
示例:
pt-slave-delay --delay 1h --user=username --password=password
30.pt-slave-find
作用:查找MySQL復(fù)制拓?fù)渲械乃袕膸?kù)。
示例:
pt-slave-find --user=username --password=password
31.pt-slave-restart
作用:監(jiān)控并自動(dòng)重啟MySQL復(fù)制從庫(kù)。
示例:
pt-slave-restart --user=username --password=password
32.pt-stalk
作用:在檢測(cè)到MySQL服務(wù)器的問題時(shí)收集診斷數(shù)據(jù)。
示例:
pt-stalk --user=username --password=password
33.pt-summary
作用:提供MySQL服務(wù)器的摘要信息。
示例:
pt-summary
34.pt-table-checksum
作用:生成MySQL表的校驗(yàn)和以檢測(cè)復(fù)制中的數(shù)據(jù)差異。
參數(shù):
--binary-index 修改 --create-replicate-table 行為,使復(fù)制表的上限和下限列使用 BLOB 數(shù)據(jù)類型
--channel=s 連接到服務(wù)器時(shí)使用的復(fù)制通道名稱
--[no]check-binlog-format 檢查所有服務(wù)器的 binlog_format 是否相同(默認(rèn)為 yes)
--[no]check-plan 檢查查詢執(zhí)行計(jì)劃是否安全(默認(rèn)為 yes)
--chunk-index=s 首選用于分塊表的索引
--chunk-index-columns=i 使用索引的左側(cè)這么多列來分塊表
--chunk-size=z 每個(gè)校驗(yàn)查詢選擇的行數(shù)(默認(rèn)為 1000)
--chunk-time=f 動(dòng)態(tài)調(diào)整分塊大小,使每個(gè)校驗(yàn)查詢執(zhí)行時(shí)間為指定秒數(shù)(默認(rèn)為 0.5)
--[no]create-replicate-table 如果不存在,則創(chuàng)建 --replicate 數(shù)據(jù)庫(kù)和表(默認(rèn)為 yes)
--disable-qrt-plugin 禁用 QRT(查詢響應(yīng)時(shí)間)插件(如果已啟用)
--[no]empty-replicate-table 在對(duì)表進(jìn)行校驗(yàn)之前刪除先前的校驗(yàn)結(jié)果(默認(rèn)為 yes)
--fail-on-stopped-replication 如果復(fù)制已停止,則報(bào)錯(cuò)退出(退出狀態(tài)碼 128),而不是等待復(fù)制重新啟動(dòng)
--float-precision=i FLOAT 和 DOUBLE 數(shù)字到字符串轉(zhuǎn)換的精度
--function=s 校驗(yàn)和的哈希函數(shù)(FNV1A_64、MURMUR_HASH、SHA1、MD5、CRC32 等)
--pause-file=s 當(dāng)指定的文件存在時(shí),執(zhí)行將暫停
--pid=s 創(chuàng)建指定的 PID 文件
--plugin=s 定義 pt_table_checksum_plugin 類的 Perl 模塊文件
--progress=a 將進(jìn)度報(bào)告打印到 STDERR(默認(rèn)為 time,30)
--quiet -q 僅打印最重要的信息(禁用 --progress)(默認(rèn)為 0)
--recurse=i 在發(fā)現(xiàn)復(fù)制時(shí)遞歸的層級(jí)數(shù)
--recursion-method=a 發(fā)現(xiàn)復(fù)制時(shí)的首選遞歸方法(默認(rèn)為 processlist,hosts)
--replicate=s 將校驗(yàn)結(jié)果寫入此表(默認(rèn)為 percona.checksums)
--[no]replicate-check 在完成每個(gè)表后,檢查復(fù)制是否存在數(shù)據(jù)差異(默認(rèn)為 yes)
--replicate-check-only 僅檢查復(fù)制是否一致,而不執(zhí)行校驗(yàn)查詢
--replicate-check-retries=i 當(dāng)遇到差異時(shí),重試校驗(yàn)比較此次數(shù)(默認(rèn)為 1)
--replicate-database=s 僅使用此數(shù)據(jù)庫(kù)
--resume 從上次完成的塊繼續(xù)校驗(yàn)(禁用 --[no]empty-replicate-table)
--retries=i 當(dāng)遇到非致命錯(cuò)誤時(shí),重試此次數(shù)(默認(rèn)為 2)
--run-time=m 運(yùn)行時(shí)間,可選的后綴 s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,默認(rèn)為 s
--separator=s 用于 CONCAT_WS() 的分隔符字符(默認(rèn)為 #)
--skip-check-slave-lag=d 跳過檢查從庫(kù)延遲的 DSN
--slave-password=s 設(shè)置用于連接到從庫(kù)的密碼
--slave-skip-tolerance=f 當(dāng)一個(gè)主表標(biāo)記為僅在一個(gè)塊中進(jìn)行校驗(yàn),但從庫(kù)表超過此的最大接受大小時(shí),跳過此表(默認(rèn)為 1.0)
--slave-user=s 設(shè)置用于連接到從庫(kù)的用戶
--trim 對(duì) VARCHAR 列添加 TRIM()(在比較 4.1 和 >= 5.0 時(shí)有幫助)
--truncate-replicate-table 在開始校驗(yàn)之前截?cái)鄰?fù)制表
--[no]version-check 檢查最新版本的 Percona Toolkit、MySQL 和其他程序(默認(rèn)為 yes)
--where=s 僅執(zhí)行匹配此 WHERE 子句的行
Config:
--config=A 讀取此逗號(hào)分隔的配置文件列表;如果指定,必須作為命令行的第一個(gè)選項(xiàng)
Connection:
--ask-pass 連接到 MySQL 時(shí)提示輸入密碼
--defaults-file=s -F 僅從給定文件中讀取 MySQL 選項(xiàng)
--host=s -h 要連接的主機(jī)(默認(rèn)為 localhost)
--password=s -p 連接時(shí)使用的密碼
--port=i -P 連接使用的端口號(hào)
--set-vars=A 設(shè)置這些 MySQL 變量的值,以逗號(hào)分隔的變量=值對(duì)
--socket=s -S 使用的連接套接字文件
--user=s -u 如果不是當(dāng)前用戶,則登錄使用的用戶
Filter:
--columns=a -c 僅校驗(yàn)此逗號(hào)分隔的列
--databases=h -d 僅校驗(yàn)此逗號(hào)分隔的數(shù)據(jù)庫(kù)
--databases-regex=s 僅校驗(yàn)數(shù)據(jù)庫(kù)名稱與此 Perl 正則表達(dá)式匹配的數(shù)據(jù)庫(kù)
--engines=h -e 僅校驗(yàn)使用這些存儲(chǔ)引擎的表
--ignore-columns=H 在計(jì)算校驗(yàn)和時(shí)忽略此逗號(hào)分隔的列
--ignore-databases=H 忽略此逗號(hào)分隔的數(shù)據(jù)庫(kù)
--ignore-databases-regex=s 忽略名稱與此 Perl 正則表達(dá)式匹配的數(shù)據(jù)庫(kù)
--ignore-engines=H 忽略此逗號(hào)分隔的存儲(chǔ)引擎(默認(rèn)為 FEDERATED,MRG_MyISAM)
--ignore-tables=H 忽略此逗號(hào)分隔的表
--ignore-tables-regex=s 忽略名稱與此 Perl 正則表達(dá)式匹配的表
--tables=h -t 僅校驗(yàn)此逗號(hào)分隔的表
--tables-regex=s 僅校驗(yàn)名稱與此 Perl 正則表達(dá)式匹配的表
示例:
pt-table-checksum --user=username --password=password
35.pt-table-sync
作用:同步MySQL表的數(shù)據(jù),以修復(fù)復(fù)制中的數(shù)據(jù)差異。
參數(shù):
--algorithms=s 比較表時(shí)使用的算法優(yōu)先級(jí)順序(默認(rèn)為 Chunk,Nibble,GroupBy,Stream)
--ask-pass 連接到 MySQL 時(shí)提示輸入密碼
--bidirectional 啟用第一個(gè)和后續(xù)主機(jī)之間的雙向同步
--[no]bin-log 記錄到二進(jìn)制日志(SET SQL_LOG_BIN=1)(默認(rèn)為 yes)
--buffer-in-mysql 指示 MySQL 在其內(nèi)存中緩沖查詢
--[no]buffer-to-client 在比較時(shí)逐行從 MySQL 獲取行(默認(rèn)為 yes)
--channel=s 連接到使用復(fù)制通道的服務(wù)器時(shí)的通道名稱
--charset=s -A 默認(rèn)字符集
--[no]check-child-tables 檢查 --execute 是否會(huì)對(duì)子表產(chǎn)生不利影響(默認(rèn)為 yes)
--[no]check-master 使用 --sync-to-master 時(shí),嘗試驗(yàn)證檢測(cè)到的主服務(wù)器是否真正是主服務(wù)器(默認(rèn)為 yes)
--[no]check-slave 檢查目標(biāo)服務(wù)器是否為從服務(wù)器(默認(rèn)為 yes)
--[no]check-triggers 檢查目標(biāo)表上是否定義了觸發(fā)器(默認(rèn)為 yes)
--chunk-column=s 使用此列對(duì)表進(jìn)行分塊
--chunk-index=s 使用此索引對(duì)表進(jìn)行分塊
--chunk-size=s 每個(gè)分塊的行數(shù)或數(shù)據(jù)大?。J(rèn)為 1000)
--columns=a -c 僅比較此逗號(hào)分隔的列
--config=A 讀取此逗號(hào)分隔的配置文件列表;如果指定,必須作為命令行的第一個(gè)選項(xiàng)
--conflict-column=s 在雙向同步期間,當(dāng)行沖突時(shí)比較此列
--conflict-comparison=s 選擇具有此屬性的 --conflict-column 作為源
--conflict-error=s 如何報(bào)告無法解決的沖突和沖突錯(cuò)誤(默認(rèn)為 warn)
--conflict-threshold=s 一個(gè) --conflict-column 必須超過另一個(gè)的量
--conflict-value=s 對(duì)于某些 --conflict-comparison,使用此值
--databases=h -d 僅同步此逗號(hào)分隔的數(shù)據(jù)庫(kù)
--defaults-file=s -F 僅從給定文件中讀取 MySQL 選項(xiàng)
--dry-run 分析,確定要使用的同步算法,打印并退出
--engines=h -e 僅同步使用此逗號(hào)分隔的存儲(chǔ)引擎的表
--execute 執(zhí)行查詢以使表具有相同的數(shù)據(jù)
--explain-hosts 打印連接信息并退出
--float-precision=i FLOAT 和 DOUBLE 數(shù)字到字符串轉(zhuǎn)換的精度
--[no]foreign-key-checks 啟用外鍵檢查(SET FOREIGN_KEY_CHECKS=1)(默認(rèn)為 yes)
--function=s 用于校驗(yàn)和的哈希函數(shù)
--help 顯示幫助信息并退出
--[no]hex-blob HEX() BLOB、TEXT 和 BINARY 列(默認(rèn)為 yes)
--host=s -h 要連接的主機(jī)
--ignore-columns=H 在比較中忽略此逗號(hào)分隔的列名
--ignore-databases=H 忽略此逗號(hào)分隔的數(shù)據(jù)庫(kù)
--ignore-engines=H 忽略此逗號(hào)分隔的存儲(chǔ)引擎(默認(rèn)為 FEDERATED,MRG_MyISAM)
--ignore-tables=H 忽略此逗號(hào)分隔的表
--[no]index-hint 在分塊和行查詢中添加 FORCE/USE INDEX 提示(默認(rèn)為 yes)
--lock=i 鎖定表:0=無,1=每個(gè)同步周期,2=每個(gè)表,3=全局
--lock-and-rename 鎖定源和目標(biāo)表,同步后交換名稱
--password=s -p 連接時(shí)使用的密碼
--pid=s 創(chuàng)建指定的 PID 文件
--port=i -P 連接使用的端口號(hào)
--print 打印解決差異的查詢
--recursion-method=a 用于查找從服務(wù)器的首選遞歸方法(默認(rèn)為 processlist,hosts)
--replace 將所有 INSERT 和 UPDATE 語(yǔ)句寫為 REPLACE
--replicate=s 同步在此表中列出為不同的表
--set-vars=A 設(shè)置此逗號(hào)分隔的變量=值對(duì)的 MySQL 變量
--slave-password=s 設(shè)置用于連接到從服務(wù)器的密碼
--slave-user=s 設(shè)置用于連接到從服務(wù)器的用戶
--socket=s -S 使用的連接套接字文件
--sync-to-master 將 DSN 視為從服務(wù)器,并將其同步到其主服務(wù)器
--tables=h -t 僅同步此逗號(hào)分隔的表
--timeout-ok 如果 --wait 失敗,則繼續(xù)
--[no]transaction 使用事務(wù)而不是 LOCK TABLES
--trim 在 BIT_XOR 和 ACCUM 模式下 TRIM() VARCHAR 列
--[no]unique-checks 啟用唯一鍵檢查(SET UNIQUE_CHECKS=1)(默認(rèn)為 yes)
--user=s -u 如果不是當(dāng)前用戶,則登錄使用的用戶
--verbose -v 打印同步操作的結(jié)果
--version 顯示版本信息并退出
--[no]version-check 檢查最新版本的 Percona Toolkit、MySQL 和其他程序(默認(rèn)為 yes)
--wait=m -w 等待從服務(wù)器追上它們的主服務(wù)器的時(shí)間??蛇x的后綴 s=秒,m=分鐘,h=小時(shí),d=天;如果沒有后綴,默認(rèn)為 s
--where=s WHERE 子句,用于將同步限制為表的一部分
--[no]zero-chunk 添加一個(gè)用于具有零或等效于零值的行的分塊(默認(rèn)為 yes)
示例:
pt-table-sync --user=username --password=password
36.pt-table-usage
作用:分析MySQL查詢?nèi)罩疽詧?bào)告表的使用情況。
示例:
pt-table-usage --user=username --password=password slow.log
37.pt-upgrade
作用:分析MySQL查詢?nèi)罩疽詸z測(cè)升級(jí)到新版本后的潛在問題。
示例:
pt-upgrade --user=username --password=password /path/to/slow.log
38.pt-variable-advisor
作用:檢查MySQL服務(wù)器的變量設(shè)置,并給出優(yōu)化建議。
示例:
pt-variable-advisor --user=username --password=password
39.pt-visual-explain
作用:生成MySQL查詢計(jì)劃的可視化解釋。
示例:
pt-visual-explain "SELECT * FROM users WHERE id = 1"
注意事項(xiàng)
- 安全性:使用工具時(shí)需謹(jǐn)慎,避免對(duì)生產(chǎn)環(huán)境造成負(fù)面影響。
- 版本兼容性:確保工具版本與MySQL版本兼容。
- 配置文件:使用配置文件能夠方便地管理和調(diào)整參數(shù)。
總結(jié)
Percona Toolkit工具集是管理和優(yōu)化MySQL和MariaDB數(shù)據(jù)庫(kù)的強(qiáng)大工具,能夠幫助數(shù)據(jù)庫(kù)管理員和開發(fā)人員提升工作效率,優(yōu)化數(shù)據(jù)庫(kù)性能,確保數(shù)據(jù)的完整性和一致性。通過本文的介紹和解析,相信你能更全面地理解和應(yīng)用這些工具,從而更好地管理和維護(hù)數(shù)據(jù)庫(kù)系統(tǒng)。
作者介紹
吳守陽(yáng),51CTO社區(qū)編輯,擁有8年DBA工作經(jīng)驗(yàn),熟練管理MySQL、Redis、MongoDB等開源數(shù)據(jù)庫(kù)。精通性能優(yōu)化、備份恢復(fù)和高可用性架構(gòu)設(shè)計(jì)。善于故障排除和自動(dòng)化運(yùn)維,保障系統(tǒng)穩(wěn)定可靠。具備良好的團(tuán)隊(duì)合作和溝通能力,致力于為企業(yè)提供高效可靠的數(shù)據(jù)庫(kù)解決方案。