它通常涉及以下两个动作:
-
迁移: 将数据从业务实例迁移到归档实例。
-
删除: 从业务实例中删除已迁移的数据。
在处理类似需求时,都是开发童鞋提单给DBA,由DBA来处理。
于是,很多开发童鞋就好奇,DBA都是怎么执行归档操作的?归档条件没有索引会锁表吗?安全吗,会不会数据删了,却又没归档成功?
针对这些疑问,下面介绍MySQL中的数据归档神器——pt-archiver。
一、什么是 pt-archiver
pt-archiver是Percona Toolkit中的一个工具。
Percona Toolkit是Percona公司提供的一个MySQL工具包。
工具包里提供了很多实用的MySQL管理工具。
譬如,我们常用的表结构变更工具pt-online-schema-change,主从数据一致性校验工具pt-table-checksum。
毫不夸张地说,熟练使用Percona Toolkit是MySQL DBA必备的技能之一。
二、安装
Percona Toolkit下载地址:https://www.percona.com/downloads/percona-toolkit/LATEST/
官方针对多个系统提供了现成的软件包。
我常用的是Linux - Generic二进制包。
下面以Linux - Generic版本为例,看看它的安装方法。
# cd /usr/local/
# wget https://downloads.percona.com/downloads/percona-toolkit/3.3.1/binary/tarball/percona-toolkit-3.3.1_x86_64.tar.gz --no-check-certificate
# tar xvf percona-toolkit-3.3.1_x86_64.tar.gz
# cd percona-toolkit-3.3.1
# yum install perl-ExtUtils-MakeMaker perl-DBD-MySQL perl-Digest-MD5
# perl Makefile.PL
# make
# make install
三、简单入门
首先,我们看一个简单的归档Demo。
测试数据
mysql> show create table employees.departments\G
*************************** 1. row ***************************
Table: departments
Create Table: CREATE TABLE `departments` (
`dept_no` char(4) NOT NULL,
`dept_name` varchar(40) NOT NULL,
PRIMARY KEY (`dept_no`),
UNIQUE KEY `dept_name` (`dept_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> select * from employees.departments;
+---------+--------------------+
| dept_no | dept_name |
+---------+--------------------+
| d009 | Customer Service |
| d005 | Development |
| d002 | Finance |
| d003 | Human Resources |
| d001 | Marketing |
| d004 | Production |
| d006 | Quality Management |
| d008 | Research |
| d007 | Sales |
+---------+--------------------+
9 rows in set (0.00 sec)
下面,我们将employees.departments表的数据从192.168.244.10归档到192.168.244.128。
具体命令如下:
pt-archiver --source h=192.168.244.10,P=3306,u=pt_user,p=pt_pass,D=employees,t=departments --dest h=192.168.244.128,P=3306,u=pt_user,p=pt_pass,D=employees,t=departments --where "1=1"
命令行中指定了三个参数。
-
--source:源库(业务实例)的DSN。
DSN在Percona Toolkit中比较常见,可理解为目标实例相关信息的缩写。
支持的缩写及含义如下:
-
--dest:目标库(归档实例)的DSN。
-
--where:归档条件。"1=1"代表归档全表。
四、实现原理
下面结合General log的输出看看pt-archiver的实现原理。