ITPub博客

首页 > 数据库 > MySQL > pt-archiver工具的使用

pt-archiver工具的使用

原创 MySQL 作者:小亮520cl 时间:2015-11-10 11:16:27 0 删除 编辑
pt-archiver工具其实就是用来清理,归档数据用的
下面列举了三种常用的功能

1,只清理数据
mysql> use sb
Database changed

mysql> select * from sb2;
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
|  4 | d    |
|  5 | e    |
|  6 | f    |
|  7 | h    |
+----+------+

mysql> alter table sb2 add primary key (id);
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

把sb库里sb2表的数据,id >=5的数据清除
[root@goolen goolen]# pt-archiver --source h=192.168.100.50,D=sb,t=sb2 --user=root --password=root --where 'id>=5' --purge --limit=1 --no-check-charset

执行完后
观察日志输出:
141128 11:47:52     8 Connect   root@192.168.100.50 on sb
                    8 Query     set autocommit=0
                    8 Query     SELECT @@SQL_MODE
                    8 Query     SHOW VARIABLES LIKE 'wait\_timeout'
                    8 Query     SET SESSION wait_timeout=10000
                    8 Query     SET @@SQL_QUOTE_SHOW_CREATE = 1/*!40101, @@SQL_MODE='NO_AUTO_VALUE_ON_ZERO'*/
                    8 Query     SHOW VARIABLES LIKE 'version%'
                    8 Query     SHOW ENGINES
                    8 Query     SHOW VARIABLES LIKE 'innodb_version'
                    8 Query     show variables like 'innodb_rollback_on_timeout'
                    8 Query     /*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */
                    8 Query     USE `sb`
                    8 Query     SHOW CREATE TABLE `sb`.`sb2`
                    8 Query     /*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */
                    8 Query     SHOW VARIABLES LIKE 'version%'
                    8 Query     SHOW ENGINES
                    8 Query     SHOW VARIABLES LIKE 'innodb_version'
                    8 Query     SELECT CONCAT(@@hostname, @@port)
                    8 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (id>=5) ORDER BY `id` LIMIT 1
                    8 Query     DELETE FROM `sb`.`sb2` WHERE (`id` = '5')
                    8 Query     commit
                    8 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (id>=5) AND ((`id` >= '5')) ORDER BY `id` LIMIT 1
                    8 Query     DELETE FROM `sb`.`sb2` WHERE (`id` = '6')
                    8 Query     commit
                    8 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (id>=5) AND ((`id` >= '6')) ORDER BY `id` LIMIT 1
                    8 Query     DELETE FROM `sb`.`sb2` WHERE (`id` = '7')
                    8 Query     commit
                    8 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (id>=5) AND ((`id` >= '7')) ORDER BY `id` LIMIT 1
                    8 Query     commit
                    8 Quit
141128 11:47:53     1 Query     SELECT 1 As Value
141128 11:47:56     1 Query     SELECT 1 As Value

查一下源表数据,id >=5 的数据已经从源表删除了
mysql> select * from sb2;                   
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
|  4 | d    |
+----+------+

参数说明:
--purge 清理数据,直接删除源表里的数据,谨慎使用;
--where 指定删除条件,必须的条件,有字符串的,要用引号括起来
--limit 表示一次要删除多少行数据,这里设置为1,表示一次只删除一行,根据说明的日志跟踪可以看出来,id>=5的有三条数据,分三次删除,每次只删除一条数据


2,只把数据导出到外部文件,但是不删除源表里的数据:
mysql> select * from sb2;
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
|  4 | d    |
+----+------+
4 rows in set (0.00 sec)

[root@goolen goolen]# pt-archiver --source h=192.168.100.50,D=sb,t=sb2 --user=root --password=root --where '1=1' --no-check-charset --no-delete --file="/tmp/archiver.dat" 
[root@goolen goolen]# cat /tmp/archiver.dat 
1       a
2       b
3       c
4       d

查看源表数据,由于加了--no-delete参数,源表数据还在
mysql> select * from sb2;
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
|  4 | d    |
+----+------+
4 rows in set (0.00 sec)

查看查询日志输出:
9 Query     USE `sb`
9 Query     SHOW CREATE TABLE `sb`.`sb2`
9 Query     /*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */
9 Query     SHOW VARIABLES LIKE 'version%'
9 Query     SHOW ENGINES
9 Query     SHOW VARIABLES LIKE 'innodb_version'
9 Query     SELECT CONCAT(@@hostname, @@port)
9 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) ORDER BY `id` LIMIT 1
9 Query     commit
9 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) AND ((`id` > '1')) ORDER BY `id` LIMIT 1
9 Query     commit
9 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) AND ((`id` > '2')) ORDER BY `id` LIMIT 1
9 Query     commit
9 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) AND ((`id` > '3')) ORDER BY `id` LIMIT 1
9 Query     commit
9 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) AND ((`id` > '4')) ORDER BY `id` LIMIT 1
9 Query     commit

参数说明:
--no-delete 表示不删除源表里的数据;
--file 指定数据要导出到哪个文件;


3,把数据归档到其他表(支持远程归档)
mysql> select * from sb2;
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
|  4 | d    |
+----+------+
4 rows in set (0.00 sec)

[root@goolen goolen]# pt-archiver --source h=192.168.100.50,D=sb,t=sb2,u=root,p=root --dest h=192.168.100.92,D=goolen,t=sb250,u=root,p=root --where '1=1' --no-check-charset

查看源表数据,由于未加--no-delete参数,源表数据清除了
mysql> select * from sb2;
Empty set (0.00 sec)

查看目标数据库里的表,数据已经成功归档过来
mysql> select * from sb250;
+----+------+
| id | name |
+----+------+
|  1 | a    | 
|  2 | b    | 
|  3 | c    | 
|  4 | d    | 
+----+------+
4 rows in set (0.00 sec)

查看查询日志:
10 Query     USE `sb`
10 Query     SHOW CREATE TABLE `sb`.`sb2`
10 Query     /*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */
10 Query     SHOW VARIABLES LIKE 'version%'
10 Query     SHOW ENGINES
10 Query     SHOW VARIABLES LIKE 'innodb_version'
10 Query     SELECT CONCAT(@@hostname, @@port)
10 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) ORDER BY `id` LIMIT 1
10 Query     DELETE FROM `sb`.`sb2` WHERE (`id` = '1')
10 Query     commit
10 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) AND ((`id` >= '1')) ORDER BY `id` LIMIT 1
10 Query     DELETE FROM `sb`.`sb2` WHERE (`id` = '2')
10 Query     commit
10 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) AND ((`id` >= '2')) ORDER BY `id` LIMIT 1
10 Query     DELETE FROM `sb`.`sb2` WHERE (`id` = '3')
10 Query     commit
10 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) AND ((`id` >= '3')) ORDER BY `id` LIMIT 1
10 Query     DELETE FROM `sb`.`sb2` WHERE (`id` = '4')
10 Query     commit
10 Query     SELECT /*!40001 SQL_NO_CACHE */ `id`,`name` FROM `sb`.`sb2` FORCE INDEX(`PRIMARY`) WHERE (1=1) AND ((`id` >= '4')) ORDER BY `id` LIMIT 1
10 Query     commit


参数说明:
--dest 指定远程数据库信息
--no-delete 如果不指定次参数,当数据归档到远程库后,会删除源表的数据,使用时需要注意

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-1826779/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
毕业以后专业任职数据库工程师职位,itpub一直作为自己的笔记记录的地方,blog写的不详细,草书笔记,仅供参考!

注册时间:2013-09-12

  • 博文量
    530
  • 访问量
    971408