作者: 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 | DATABASE TABLE ROWS |
用pt-align test.txt
对齐以后,格式如下
1 | DATABASE TABLE ROWS |
是不是好看多了。
再比如有test1.csv
文件,内容如下
1 | visit_district,pv_count,visitor_count,avg_visit_time,avg_visit_pages,new_visitor_count,ip_count |
将逗号替换成空格,再用pt-align对齐
命令如下
sed 's/,/ /g' test1.csv |pt-align
对齐后格式如下
1 | visit_district pv_count visitor_count avg_visit_time avg_visit_pages new_visitor_count ip_count |
更容易方便人看文件的内容
pt-archiver
pt-archiver 是一个归档工具,可以把表的内容归档到一个文件,文件以后可以被其他导入工具或者导入命令用来导入数据库。也可以直接归档到另外一个数据库的表里面。这个工具可以添加where条件,只导表的一部分内容也可以。
需要注意的一点是,这个工具归档完表里的内容,会把原表的内容删掉,如果不想删除原表的内容,要加--no-delete
参数
我们来实际用一下,我们先把testdb
数据库里面的表cars
,归档到cars_bak
里面(仅仅是演示,环境限制,就不归档到远程数据库了,大家明白这个工具有这个能力即可),然后再把这个cars_bak
表归档到一个文件里。
首先登陆到数据库里面,创建一个cars_bak
空表,然后再创建一个索引(pt-archiver默认要求表至少有一个索引才能正常被归档),
1 | create table testdb.cars_bak as select * from testdb.cars where 1=2; |
然后执行如下命令,测试归档到表的功能
1 | pt-archiver --source h=192.168.0.204,u=proxysql,p=proxypassword,D=testdb,t=cars \ |
命令执行完没有任何提示(可以加–progress参数,能看到导的过程),我们把这个表导出来,看看里面的内容
1 | mkdir -p /var/log/archive |
查看文件内容
1 | cat /var/log/archive/2020-11-25-testdb.cars_bak |
内容如下
1 | 1 Audi 52642 |
pt-archiver这个工具还有很多其他参数,有兴趣的小伙伴可以自行研究一下
pt-config-diff
pt-config-diff是一个比较Mysql或者MariaDB配置的工具,这个配置可以是两个配置文件,也可以是两个不同的数据库实例上show variables
命令的结果(也就是内存里实际正在生效的配置),也可以一个是数据库实例上内存里的配置,另外一个是配置文件。
根据我们的环境,我们先比较一下主库上的配置文件和从库上的配置文件
1 | scp 192.168.0.204:/etc/mysql/mariadb.conf.d/50-server.cnf primary.cnf |
两个配置文件没啥不同,输出为空
我们再比较下主库和从库上内存里的配置
1 | pt-config-diff h=192.168.0.204,u=proxysql,p=proxypassword h=192.168.0.64,u=proxysql,p=proxypassword |
这下可以看到不同了
1 | 17 config differences |
我们再比较下主库的内存和配置文件的不同
1 | pt-config-diff h=192.168.0.204,u=proxysql,p=proxypassword primary.cnf |
我们可以看到也是有两个不同的
1 | 2 config differences |
pt-diskstats
pt-diskstats是一个查看磁盘io信息的工具,输出和iostat差不多,比iostat稍微详细点。另外这个工具可以把io信息保存到文件里,后续可以用pt-diskstats再打开这个文件分析,相当于一个io信息采集工具,这个用法用man pt-diskstats
可以看到,我们就不再演示。这里只演示下默认的直接显示当前主机io的效果, 直接输入pt-diskstats
回车即可
默认输出效果如下
1 | 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 |
按个?
键,就可以显示用于交互的命令键
1 | You can control this program by key presses: |
pt-find
pt-find是一个数据库搜索工具,可以根据你提供的条件搜索满足符合这些条件的对象,还可以加一个执行动作,对这些搜索出来的对象批量执行这个动作,这是一个很有用的工具。
我们来测试一下
比如我们要找到testdb数据库里面的空表
1 | pt-find --empty -h192.168.0.204 -uproxysql -pproxypassword testdb |
输出如下
1 | `testdb`.`cars_bak` |
如果想找到空表的同时,还要把这些表删掉,可以这么操作
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 | 1.00s [ 0.02s, 0.00s, 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
命令可以看到具体的工具列表。