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