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 神器全攻略(監控類)
Enjoy GreatSQL 😃
關於 GreatSQL
GreatSQL是適用於金融級應用的國內自主開源資料庫,具備高效能、高可靠、高易用性、高安全等多個核心特性,可以作為MySQL或Percona Server的可選替換,用於線上生產環境,且完全免費併相容MySQL或Percona Server。
相關連結: GreatSQL社群 Gitee GitHub Bilibili
GreatSQL社群:
社群部落格有獎徵稿詳情:https://greatsql.cn/thread-100-1-1.html
技術交流群:
微信:掃碼新增
GreatSQL社群助手
微信好友,傳送驗證資訊加群
。