加入收藏 | 设为首页 | 会员中心 | 我要投稿 岳阳站长网 (https://www.0730zz.com.cn/)- 科技、建站、数据库平台、数据湖、视觉智能!
当前位置: 首页 > 云计算 > 正文

怎么还有人问 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
  ...

(编辑:岳阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读