• 欢迎访问DBA的辛酸事儿,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 欢迎大家关注博主公众号:DBA的辛酸事儿
  • 博文中若有错误的地方,请大家指正,大家的指正是我前进的动力

【Percona-toolkit系列】Percona Toolkit工具之pt-find

MySQL SEian.G 5年前 (2019-12-09) 1996次浏览 已收录 0个评论

Percona-toolkit工具包系列文章

pt-find工具在实际的应用中可能用的不多,但是他的功能也是不容小觑的,在某些场景下,也是非常有用的;

语法:

pt-find [OPTIONS] [DATABASES]

作用:

pt-find searches for MySQL tables and executes actions, like GNU find

使用案例

1、查找出最近一天创建的MyISAM存储引擎表

[root@VM_54_118_centos ~]# pt-find --ctime -1 --engine MyISAM --user=root --sock=/tmp/mysql3306.sock --host=localhost --password=xxxxxx 
`meta_file_1`.`wjqtb1`

2、查找一天前建立的MyISAM 引擎的表

[root@VM_54_118_centos ~]# pt-find --ctime +1 --engine MyISAM --user=root --sock=/tmp/mysql3306.sock --host=localhost --password=xxxxxx
`mysql`.`columns_priv`
`mysql`.`db`
`mysql`.`event`
`mysql`.`func`
`mysql`.`ndb_binlog_index`
`mysql`.`proc`
`mysql`.`procs_priv`
`mysql`.`proxies_priv`
`mysql`.`tables_priv`
`mysql`.`user`
`testdb`.`wjquser`
`wjq`.`wjq_myisam_count1`

3、以友好的方式输出结果

[root@VM_54_118_centos ~]# pt-find wjq --ctime +1 --engine MyISAM --noquote --printf "this is result: tab_name:%D.%N\t\tsize:%T\n" --user=root --sock=/tmp/mysql3306.sock --host=localhost --password=xxxxxx 
this is result: tab_name:wjq.wjq_myisam_count1          size:5069216

参数说明:

结果可以使用printf自定义打印

–ctime:创建时间

–engine:表的存储引擎

–noquote:不打印mysql的反引号

–printf:对于匹配的表,我们可以打印出自定义的信息。%T表大小,%D数据库名,%N表名

4、将一天前创建的myisam引擎表修改为innodb引擎

[root@VM_54_118_centos ~]# pt-find wjq --ctime +1 --engine MyISAM --noquote --printf "this is result: tab_name:%D.%N\t\tsize:%T\n" --exec "alter table %D.%N ENGINE=InnoDB" --user=root --sock=/tmp/mysql3306.sock --host=localhost --password=xxxxxx 
this is result: tab_name:wjq.wjq_myisam_count1          size:5069216

只需用–exec加上我们需要只需的SQL语句即可。

5、查看wjq库下空表

[root@VM_54_118_centos ~]# pt-find wjq --empty --user=root --sock=/tmp/mysql3306.sock --host=localhost --password=xxxxxx            
`wjq`.`accounts`
`wjq`.`chartest`
`wjq`.`child`
`wjq`.`parent`
`wjq`.`testkey`
`wjq`.`xatest`

6、查找出wjq数据库中大于1M的表,并且按照大小排序

[root@VM_54_118_centos ~]# pt-find wjq --tablesize +1M --noquote --printf "%T \t%D.%N\n" --user=root --sock=/tmp/mysql3306.sock --host=localhost --password=xxxxxx  | sort -rn
10518528 wjq.wjq_innodb_count1
8421376 wjq.wjq_myisam_count1
6324224 wjq.test2

–tablesize:按照表尺寸查找

这个功能个人感觉还是蛮实用的,最起码可以很快定位到数据的大表,当然通过information_schema也是可以快速查询的到表的使用大小的。

7、可以将查询出来的这些数据插入到表中:

要先创建表:

root@localhost [wjq]>create table tbsize(db varchar(30), tbl varchar(30), size int); 
Query OK, 0 rows affected (0.12 sec)

执行插入操作:

[root@VM_54_118_centos ~]# pt-find wjq --user=root --sock=/tmp/mysql3306.sock --host=localhost --password=xxxxxx  --noquote --exec "INSERT INTO wjq.tbsize(db, tbl, size) VALUES('%D', '%N', %T)"     

查看插入结果

root@localhost [wjq]>select * from tbsize;
+------+-------------------+----------+
| db   | tbl               | size     |
+------+-------------------+----------+
| wjq  | BlogInfo          |    49152 |
| wjq  | accounts          |    16384 |
| wjq  | chartest          |    16384 |
| wjq  | child             |    32768 |
| wjq  | emp               |    81920 |
| wjq  | parent            |    32768 |
| wjq  | tb1               |    32768 |
| wjq  | tbsize            |    16384 |
| wjq  | test2             |  6324224 |
| wjq  | test3             |    16384 |
| wjq  | test_profile      |    16384 |
| wjq  | testkey           |    65536 |
| wjq  | wjq_innodb_count1 | 10518528 |
| wjq  | wjq_innodb_count2 |    32768 |
| wjq  | wjq_myisam_count1 |  8421376 |
| wjq  | wjqtab1           |    32768 |
| wjq  | xatest            |    16384 |
+------+-------------------+----------+
17 rows in set (0.00 sec)

关于pt-find的更多使用方法详细可参考:

https://www.percona.com/doc/percona-toolkit/3.0/pt-find.html

【Percona-toolkit系列】Percona Toolkit工具之pt-find


如果您觉得本站对你有帮助,那么可以收藏和推荐本站,帮助本站更好地发展,在此谢过各位网友的支持。
转载请注明原文链接:【Percona-toolkit系列】Percona Toolkit工具之pt-find
喜欢 (3)
SEian.G
关于作者:
用心去记录工作,用心去感受生活,用心去学着成长;座右铭:苦练七十二变,笑对八十一难
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址