在arm64平台上测试Percona Toolkit

作者: zhaorenhai

Percona Toolkit是Mysql, MariaDB数据库领域一个很流行的工具箱,里面包含了很多个有用的工具。今天我们就来测试下这些工具是否可以在arm64平台上良好运行。

测试平台仍然选用华为云的鲲鹏虚拟机,OS采用Ubuntu18.04。 并提前已经在同内网内其他虚拟机上部署好了一对MariaDB主从数据库,并建好了供远程连接的数据库用户名和密码。MariaDB采用Ubuntu自带的10.1版本。

安装Percona Toolkit很简单,arm64版本的Ubuntu上面就已经自带了安装源,直接用如下命令安装即可

1
sudo apt install percona-toolkit

当然也可以直接从源码编译,可以参考官网指导:

https://github.com/percona/percona-toolkit

安装好后,用man percona-toolkit可以看到工具列表,然后man 各个具体的工具名字,能看到进一步详细的说明。

工具本身的配置参数,在 /etc/percona-toolkit目录下面,所有工具的全局配置文件为percona-toolkit.conf, 每个工具单独的配置也在这个目录下面,配置文件就是 工具的名称.conf 这样的格式。 一般刚安装默认不需要配置什么东西,除非后续你有特殊的需求。

接下来我们从中挑一些工具来测试一下,看看是否能在arm64平台上良好运行。

pt-align

pt-align严格来说并不能算一个数据库工具,因为运行的时候,并不需要连接到数据库,这个是将输出对齐用的一个小工具。

比如有文件test.txt,内容如下

1
2
3
4
DATABASE TABLE   ROWS
foo bar 100
long_db_name table 1
another long_name 500

pt-align test.txt对齐以后,格式如下

1
2
3
4
DATABASE     TABLE     ROWS
foo bar 100
long_db_name table 1
another long_name 500

是不是好看多了。

再比如有test1.csv文件,内容如下

1
2
3
4
5
6
7
8
9
10
visit_district,pv_count,visitor_count,avg_visit_time,avg_visit_pages,new_visitor_count,ip_count
中国,1285315,492801,300,3.9,453298,413898
广东,226512,63361,320,4.3,52541,54010
江苏,151617,62896,320,3.9,55049,59432
北京,120757,44391,299,3.5,39392,35887
上海,96754,41583,278,3.6,39806,33524
新加坡,87186,11359,409,5.3,3875,8955
浙江,84031,36488,264,3.2,34423,30087
湖北,74910,34522,258,3.4,33746,25516
山东,58738,25100,250,3.2,24352,19409

将逗号替换成空格,再用pt-align对齐

命令如下

sed 's/,/ /g' test1.csv |pt-align

对齐后格式如下

1
2
3
4
5
6
7
8
9
10
visit_district pv_count visitor_count avg_visit_time avg_visit_pages new_visitor_count ip_count
中国 1285315 492801 300 3.9 453298 413898
广东 226512 63361 320 4.3 52541 54010
江苏 151617 62896 320 3.9 55049 59432
北京 120757 44391 299 3.5 39392 35887
上海 96754 41583 278 3.6 39806 33524
新加坡 87186 11359 409 5.3 3875 8955
浙江 84031 36488 264 3.2 34423 30087
湖北 74910 34522 258 3.4 33746 25516
山东 58738 25100 250 3.2 24352 19409

更容易方便人看文件的内容

pt-archiver

pt-archiver 是一个归档工具,可以把表的内容归档到一个文件,文件以后可以被其他导入工具或者导入命令用来导入数据库。也可以直接归档到另外一个数据库的表里面。这个工具可以添加where条件,只导表的一部分内容也可以。

需要注意的一点是,这个工具归档完表里的内容,会把原表的内容删掉,如果不想删除原表的内容,要加--no-delete参数

我们来实际用一下,我们先把testdb数据库里面的表cars,归档到cars_bak里面(仅仅是演示,环境限制,就不归档到远程数据库了,大家明白这个工具有这个能力即可),然后再把这个cars_bak表归档到一个文件里。

首先登陆到数据库里面,创建一个cars_bak空表,然后再创建一个索引(pt-archiver默认要求表至少有一个索引才能正常被归档),

1
2
create table testdb.cars_bak as select * from testdb.cars where 1=2;
create index idx_cars on testdb.cars_bak(name);

然后执行如下命令,测试归档到表的功能

1
2
3
pt-archiver --source h=192.168.0.204,u=proxysql,p=proxypassword,D=testdb,t=cars \
--dest h=192.168.0.204,u=proxysql,p=proxypassword,D=testdb,t=cars_bak \
--where "1=1" --limit 1000 --commit-each

命令执行完没有任何提示(可以加–progress参数,能看到导的过程),我们把这个表导出来,看看里面的内容

1
2
3
4
mkdir -p /var/log/archive
pt-archiver --source h=192.168.0.204,u=proxysql,p=proxypassword,D=testdb,t=cars_bak \
--file '/var/log/archive/%Y-%m-%d-%D.%t' \
--where "1=1" --limit 1000

查看文件内容

1
cat /var/log/archive/2020-11-25-testdb.cars_bak

内容如下

1
2
3
1       Audi    52642
3 Skoda 9000
2 Volkswagen 21600

pt-archiver这个工具还有很多其他参数,有兴趣的小伙伴可以自行研究一下

pt-config-diff

pt-config-diff是一个比较Mysql或者MariaDB配置的工具,这个配置可以是两个配置文件,也可以是两个不同的数据库实例上show variables命令的结果(也就是内存里实际正在生效的配置),也可以一个是数据库实例上内存里的配置,另外一个是配置文件。

根据我们的环境,我们先比较一下主库上的配置文件和从库上的配置文件

1
2
3
scp 192.168.0.204:/etc/mysql/mariadb.conf.d/50-server.cnf primary.cnf
scp 192.168.0.64:/etc/mysql/mariadb.conf.d/50-server.cnf replica.cnf
pt-config-diff primary.cnf replica.cnf

两个配置文件没啥不同,输出为空

我们再比较下主库和从库上内存里的配置

1
pt-config-diff h=192.168.0.204,u=proxysql,p=proxypassword h=192.168.0.64,u=proxysql,p=proxypassword

这下可以看到不同了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
17 config differences
Variable mariadb-2 mariadb-3
========================= ========================= =========================
binlog_format MIXED STATEMENT
general_log_file primary1.log mariadb-3.log
gtid_binlog_pos 0-1-129
gtid_binlog_state 0-1-129
gtid_slave_pos 0-1-129
hostname mariadb-2 mariadb-3
log_bin ON OFF
log_bin_basename /var/lib/mysql/primary...
log_bin_index /var/lib/mysql/primary...
log_error ./primary1.err /var/log/mysql/error.log
pid_file /var/lib/mysql/primary... /var/run/mysqld/mysqld...
relay_log primary1-relay-bin
relay_log_basename /var/lib/mysql/primary...
relay_log_index /var/lib/mysql/primary...
server_id 1 2
slow_query_log_file primary1-slow.log mariadb-3-slow.log
wsrep_node_name mariadb-2 mariadb-3

我们再比较下主库的内存和配置文件的不同

1
pt-config-diff h=192.168.0.204,u=proxysql,p=proxypassword primary.cnf

我们可以看到也是有两个不同的

1
2
3
4
5
2 config differences
Variable mariadb-2 primary.cnf
========================= ========================= =========================
log_error ./primary1.err /var/log/mysql/error.log
pid_file /var/lib/mysql/primary... /var/run/mysqld/mysqld...

pt-diskstats

pt-diskstats是一个查看磁盘io信息的工具,输出和iostat差不多,比iostat稍微详细点。另外这个工具可以把io信息保存到文件里,后续可以用pt-diskstats再打开这个文件分析,相当于一个io信息采集工具,这个用法用man pt-diskstats可以看到,我们就不再演示。这里只演示下默认的直接显示当前主机io的效果, 直接输入pt-diskstats回车即可

默认输出效果如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ts device    rd_s rd_avkb rd_mb_s rd_mrg rd_cnc   rd_rt    wr_s wr_avkb wr_mb_s wr_mrg wr_cnc   wr_rt busy in_prg    io_s  qtime stime
0.5 vda 0.0 0.0 0.0 0% 0.0 0.0 6.6 204.0 1.3 98% 0.0 0.0 0% 0 6.6 0.0 0.0
0.5 vda2 0.0 0.0 0.0 0% 0.0 0.0 6.6 204.0 1.3 98% 0.0 0.0 0% 0 6.6 0.0 0.0

1.0 vda 2.0 4.0 0.0 0% 0.0 0.0 109.0 718.6 76.5 7% 0.4 3.5 8% 0 111.0 1.6 0.6
1.0 vda2 2.0 4.0 0.0 0% 0.0 0.0 109.0 718.6 76.5 7% 0.4 3.5 8% 8 111.0 1.5 0.6

1.0 vda 3.0 4.0 0.0 0% 0.0 0.0 768.0 563.0 422.3 2% 20.4 26.0 66% 0 771.0 23.5 0.8
1.0 vda2 3.0 4.0 0.0 0% 0.0 0.0 768.0 563.0 422.3 2% 20.4 26.0 84% 24 771.0 28.1 1.1

1.0 vda 8.0 15.5 0.1 0% 0.0 0.5 444.0 577.2 250.3 2% 19.4 42.8 69% 0 452.0 29.6 1.5
1.0 vda2 8.0 15.5 0.1 0% 0.0 0.5 444.0 577.2 250.3 2% 19.4 42.8 98% 2 452.0 31.8 2.1

1.0 vda 3.0 4.0 0.0 0% 0.8 273.3 432.0 557.1 235.0 3% 2.7 6.0 76% 0 435.0 2.2 1.7
1.0 vda2 3.0 4.0 0.0 0% 0.8 273.3 430.0 559.7 235.0 3% 2.7 6.0 76% 8 433.0 2.2 1.7

按个?键,就可以显示用于交互的命令键

1
2
3
4
5
6
7
8
9
10
11
You can control this program by key presses:
------------------- Key ------------------- ---- Current Setting ----
A, D, S) Set the group-by mode A
c) Enter a Perl regex to match column names .
/) Enter a Perl regex to match disk names (none)
z) Set the sample size in seconds 1
i) Hide inactive disks yes
p) Pause the program
q) Quit the program
space) Print headers
------------------- Press any key to continue -----------------------

pt-find

pt-find是一个数据库搜索工具,可以根据你提供的条件搜索满足符合这些条件的对象,还可以加一个执行动作,对这些搜索出来的对象批量执行这个动作,这是一个很有用的工具。

我们来测试一下

比如我们要找到testdb数据库里面的空表

1
pt-find --empty -h192.168.0.204 -uproxysql -pproxypassword testdb

输出如下

1
2
3
`testdb`.`cars_bak`
`testdb`.`football_clubs`
`testdb`.`testtable`

如果想找到空表的同时,还要把这些表删掉,可以这么操作

1
pt-find --empty -h192.168.0.204 -uproxysql -pproxypassword testdb --exec-plus "DROP TABLE %s"

pt-find还有很多其他各种各样的搜索条件,以及可以加各种各样的执行动作,具体的请参考 man pt-find

这是一个很强大的工具,但是操作起来,也有一定得风险,特别是你的执行动作是删除之类的操作的话,建议研究测试清楚以后,再执行。

pt-heartbeat

pt-heartbeat是一个监控主从数据库之间有没有延迟的工具。原理很简单,在主库起一个后台进程,这个进程会在数据库里创建一个心跳表,然后不停的往里更新数据。然后在从库上监控这些更新的数据有没有过来。

用法也很简单,首先在主数据库上起一个daemon进程。

1
pt-heartbeat -D testdb --update -h 192.168.0.204 -uproxysql -pproxypassword --daemonize --create-table

然后在从库上监控

1
pt-heartbeat -D testdb --monitor -h 192.168.0.64 -uproxysql -pproxypassword

输出如下, 第一列是当前延时,括号里面的分别是过去1分钟,5分钟,15分钟的延时平均值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.00s [  0.02s,  0.00s,  0.00s ]
1.00s [ 0.03s, 0.01s, 0.00s ]
2.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]
0.00s [ 0.07s, 0.01s, 0.00s ]

如果只想查看一下,可以用check命令

1
pt-heartbeat -D testdb --check -h 192.168.0.64 -uproxysql -pproxypassword

只会输出一个时间延迟

1
0.00

pt-mysql-summary

pt-mysql-summary是一个查看数据库信息的工具,这个工具可以看到数据库各个方面的信息,参数,配置,进程列表,对象数目,存储引擎信息,各项指标等等。 如果一下子想摸清数据库的基本情况,这个工具必不可少。

使用起来也很简单

1
pt-mysql-summary -h 192.168.0.204 -u proxysql -p proxypassword --databases testdb

具体的输出太多了,就不贴在这里了。

有兴趣的小伙伴可以自己试用一下。

总结

在我们测试的几款工具里,都可以正确的在arm64平台上运行,和x86上并没有差异。当然toolkit里还有很多其他好用的工具,篇幅所限,这里就不一一测试了,这些工具都是用perl编写的,理论上都是可以跨平台使用的。感兴趣的小伙伴可以自己试用一下。用man percona-toolkit命令可以看到具体的工具列表。

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×