pt-find使用

查找MySQL的表,并且做一些操作,基本语法就如下:
pt-find [OPTIONS] [DATABASES]

 

(1)查找一天前建立的MyISAM 引擎的表
[root@mxqmongodb2 bin]# ./pt-find --ctime +1 --engine MyISAM --host=172.16.16.35 --port=3306 --user=root --password=123456
`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`

 

(2)将一天前创建的InnoDB 表都转化为MyISAM引擎的表
pt-find --engine InnoDB --exec "ALTER TABLE %D.%N ENGINE=MyISAM" --host=172.16.16.35 --port=3306 --user=root --password=123456 --database=test

 

(3)查找某些符合某个规则的表,并且执行删除操作
pt-find --connection-id '\D_\d+_(\d+)$' --server-id '\D_(\d+)_\d+$' --exec-plus "DROP TABLE %s" --host=172.16.16.35 --port=3306 --user=root --password=123456 --database=test

 

(4)找到maxiangqian,open_api的空表
[root@mxqmongodb2 bin]# ./pt-find --empty open_api maxiangqian --host=172.16.16.35 --port=3306 --user=root --password=123456
`open_api`.`ma`
`maxiangqian`.`test02`

 

找到open_api 数据库的空表执行删除操作:
[root@mxqmongodb2 bin]# ./pt-find --empty open_api --host=172.16.16.35 --port=3306 --user=root --password=123456 --exec-plus "DROP TABLE %s"
[root@mxqmongodb2 bin]# ./pt-find --empty open_api --host=172.16.16.35 --port=3306 --user=root --password=123456

 

再次查询结果可以看到已经删除了。
(5)查找某些大表,由于我是测试环境,就查找5M以上的表吧:
[root@mxqmongodb2 bin]# ./pt-find --tablesize +5M --host=172.16.16.35 --port=3306 --user=root --password=123456
`sbtest`.`sbtest`
`tpcc`.`customer`
`tpcc`.`history`
`tpcc`.`item`
`tpcc`.`order_line`
`tpcc`.`orders`
`tpcc`.`stock`

 

这个功能个人感觉还是蛮实用的,最起码可以很快定位到数据的大表,当然通过information_schema也是可以快速查询的到表的使用大小的。
(6)查找所有的表并且打印出表大小(数据加索引),并且自动排序
[root@mxqmongodb2 bin]# ./pt-find tpcc --host=172.16.16.35 --port=3306 --user=root --password=123456 --printf "%T\t%D.%N\n" | sort -rn
407797760 `tpcc`.`stock`
338673664 `tpcc`.`order_line`
186384384 `tpcc`.`customer`
24690688 `tpcc`.`history`
19415040 `tpcc`.`orders`
9977856 `tpcc`.`item`
4341760 `tpcc`.`new_orders`
16384 `tpcc`.`warehouse`
16384 `tpcc`.`district`

 

也可以将这些数据插入到表中:
要先创建表:
mysql> create table tblsize(db varchar(30), tbl varchar(30), size int);
Query OK, 0 rows affected (0.48 sec)

 

执行插入操作:
[root@mxqmongodb2 bin]# ./pt-find tpcc --host=172.16.16.35 --port=3306 --user=root --password=123456 --noquote --exec "INSERT INTO sysdata.tblsize(db, tbl, size) VALUES('%D', '%N', %T)"

 

然后查看内容:
mysql> select * from tblsize;
+------+------------+-----------+
| db | tbl | size |
+------+------------+-----------+
| tpcc | customer | 186384384 |
| tpcc | district | 16384 |
| tpcc | history | 24690688 |
| tpcc | item | 9977856 |
| tpcc | new_orders | 4341760 |
| tpcc | order_line | 338673664 |
| tpcc | orders | 19415040 |
| tpcc | stock | 407797760 |
| tpcc | warehouse | 16384 |
+------+------------+-----------+
9 rows in set (0.00 sec)

 

posted @ 2017-06-22 12:55  M哥  阅读(838)  评论(0编辑  收藏  举报