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 如果不指定次参数,当数据归档到远程库后,会删除源表的数据,使用时需要注意
下面列举了三种常用的功能
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/23249684/viewspace-1350033/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23249684/viewspace-1350033/