怎么还有人问 MySQL 是如何归档数据的呢?
发布时间:2022-08-02 11:14:33 所属栏目:云计算 来源:互联网
导读:归档,在MySQL中,是一个相对高频的操作。 它通常涉及以下两个动作: 迁移:将数据从业务实例迁移到归档实例。 删除:从业务实例中删除已迁移的数据。 在处理类似需求时,都是开发童鞋提单给DBA,由DBA来处理。 于是,很多开发童鞋就好奇,DBA都是怎么执行归
归档,在MySQL中,是一个相对高频的操作。 它通常涉及以下两个动作: 迁移:将数据从业务实例迁移到归档实例。 删除:从业务实例中删除已迁移的数据。 在处理类似需求时,都是开发童鞋提单给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必备的技能之一。 二、安装 官方针对多个系统提供了现成的软件包。 我常用的是Linux - Generic二进制包。 下面以Linux - Generic版本为例,看看它的安装方法。 复制 # cd /usr/local/ # wget t-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 1. 2. 3. 4. 5. 6. 7. 8. 三、简单入门 首先,我们看一个简单的归档Demo。 测试数据 复制 mysql> show create table employees.departmentsG *************************** 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" 1. 命令行中指定了三个参数。 --source:源库(业务实例)的DSN。 DSN在Percona Toolkit中比较常见,可理解为目标实例相关信息的缩写。 支持的缩写及含义如下: --dest:目标库(归档实例)的DSN。 --where:归档条件。"1=1"代表归档全表。 四、实现原理 下面结合General log的输出看看pt-archiver的实现原理。 源库日志 复制 2022-03-06T10:58:20.612857+08:00 10 Query SELECT /*!40001 SQL_NO_CACHE */ `dept_no`,`dept_name` FROM `employees`.`departments` FORCE INDEX(`PRIMARY`) WHERE (1=1) ORDER BY `dept_no` LIMIT 1 2022-03-06T10:58:20.613451+08:00 10 Query DELETE FROM `employees`.`departments` WHERE (`dept_no` = 'd001') 2022-03-06T10:58:20.620327+08:00 10 Query commit 2022-03-06T10:58:20.628409+08:00 10 Query SELECT /*!40001 SQL_NO_CACHE */ `dept_no`,`dept_name` FROM `employees`.`departments` FORCE INDEX(`PRIMARY`) WHERE (1=1) AND ((`dept_no` >= 'd001')) ORDER BY `dept_no` LIMIT 1 2022-03-06T10:58:20.629279+08:00 10 Query DELETE FROM `employees`.`departments` WHERE (`dept_no` = 'd002') 2022-03-06T10:58:20.636154+08:00 10 Query commit ... ![]() (编辑:岳阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |