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)
热衷于学习讨论MySQL和SQL Server,NoSQL等数据库技术,欢迎加入SQL优化群:659336691