02. pt-archiver
pt-archiver \
--source h=192.168.100.101,P=3306,u=admin,p='admin',D=db01,t=t01 \
--dest h=192.168.100.105,P=3306,u=admin,p='admin',D=db01,t=t01 \
--file '/root/2000-3000.txt' \
--where '1=1' \
--where "createTime<'2018-12-1'" \
--limit=1000 --txn-size=1000 --progress=1000 \
--no-check-charset --bulk-insert --bulk-delete --statistics \
--no-delete \
--purge \
--dry-run
默认情况下,pt-archiver操作结束后,不会对source、dest表执行analyze或optimize操作,
因为这种操作费时间,并且需要你提前预估有足够的磁盘空间用于拷贝表。
一般建议也是pt-archiver操作结束后,在业务低谷手动执行analyze table用以回收表空间。
pt-archiverBug不会迁移max(id)那条数据的解决方法:
which pt-archiver
/usr/local/bin/pt-archiver
vim /usr/local/bin/pt-archiver
修改前: $first_sql .= " AND ($col < " . $q->quote_val($val) . ")";
修改后: $first_sql .= " AND ($col <= " . $q->quote_val($val) .")";
6263 $first_sql .= " AND ($col < " . $q->quote_val($val) . ")";
---------------------------------------------------------------------------------------------
pt-archiver
把一个表归档到另一个表或文件
pt-archiver [OPTIONS] --source DSN --where WHERE
pt-archive能干啥
清理线上过期数据;
导出线上数据,到线下数据作处理;
清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器。
--------------------------------------------------
把101的db01.t01,归档到105里
t01必须有主键
准备归档表
CREATE TABLE `t01` (
`pkid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`code` int(4) unsigned zerofill NOT NULL,
`ctime` datetime DEFAULT CURRENT_TIMESTAMP,
`utime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`pkid`)
) ;
全表归档,不删除原表,批量插入
pt-archiver \
--source h=192.168.100.101,P=3306,u=admin,p='admin',D=db01,t=t01 \
--dest h=192.168.100.105,P=3306,u=admin,p='admin',D=db01,t=t01 \
--no-check-charset --where '1=1' --progress 1000 --limit=1000 --txn-size 1000 --bulk-insert --bulk-delete --statistics --no-delete
全表归档,删除原表数据,批量插入,批量删除
pt-archiver \
--source h=192.168.100.105,P=3306,u=admin,p='admin',D=db01,t=t01 \
--dest h=192.168.100.101,P=3306,u=admin,p='admin',D=db01,t=t01 \
--no-check-charset --where '1=1' --progress 1000 --limit=1000 --txn-size 1000 --bulk-insert --bulk-delete --statistics --purge
注意:pt-archiver操作的表必须有主键。
查看帮助: perldoc pt-archiver
Specify at least one of "--dest","--file", or "--purge".
下面几个参数都是互斥的,只能选其一
"--ignore"and "--replace" are mutually exclusive.
"--txn-size"and "--commit-each" are mutually exclusive.
"--low-priority-insert"and "--delayed-insert" are mutually exclusive.
"--share-lock"and "--for-update" are mutually exclusive.
"--analyze"and "--optimize" are mutually exclusive.
"--no-ascend"and "--no-delete" are mutually exclusive.
常用的参数:
--limit10000 每次取1000行数据用pt-archive处理,Number of rows to fetch and archive per statement.
--txn-size 1000 设置1000行为一个事务提交一次,Number of rows pertransaction.
--where‘id<3000‘ 设置操作条件
--progress5000 每处理5000行输出一次处理信息
--statistics 输出执行过程及最后的操作统计。(只要不加上--quiet,默认情况下pt-archive都会输出执行过程的)
--charset=UTF8 指定字符集为UTF8
--bulk-delete 批量删除source上的旧数据(例如每次1000行的批量删除操作)
--bulk-insert 批量插入数据到dest主机 (看dest的general log发现它是通过在dest主机上LOAD DATA LOCAL INFILE插入数据的)
--replace 将insert into 语句改成replace写入到dest库
--sleep120 每次归档了limit个行记录后的休眠120秒(单位为秒)
--file‘/root/test.txt‘
--purge 删除source数据库的相关匹配记录
--header 输入列名称到首行(和--file一起使用)
--no-check-charset 不指定字符集
--check-columns 检验dest和source的表结构是否一致,不一致自动拒绝执行(不加这个参数也行。默认就是执行检查的)
--no-check-columns 不检验dest和source的表结构是否一致,不一致也执行(会导致dest上的无法与source匹配的列值被置为null或者0)
--chekc-interval 默认1s检查一次
--local 不把optimize或analyze操作写入到binlog里面(防止造成主从延迟巨大)
--retries 超时或者出现死锁的话,pt-archiver进行重试的间隔(默认1s)
--no-version-check 目前为止,发现部分pt工具对阿里云RDS操作必须加这个参数
--analyze=ds 操作结束后,优化表空间(d表示dest,s表示source)
默认情况下,pt-archiver操作结束后,不会对source、dest表执行analyze或optimize操作,因为这种操作费时间,并且需要你提前预估有足够的磁盘空间用于拷贝表。一般建议也是pt-archiver操作结束后,在业务低谷手动执行analyze table用以回收表空间。
pt-archiverBug不会迁移max(id)那条数据的解决方法:
which pt-archiver
/usr/local/bin/pt-archiver
vim /usr/local/bin/pt-archiver
修改前: $first_sql .= " AND ($col < " . $q->quote_val($val) . ")";
修改后: $first_sql .= " AND ($col <= " . $q->quote_val($val) .")";
6263 $first_sql .= " AND ($col < " . $q->quote_val($val) . ")";
删除老数据(单独的删数据操作不用指定字符集):
pt-archiver \
--source h=192.168.100.101,P=3306,u=admin,p='admin',D=db01,t=t01 \
--no-check-charset --where 'pkid>5000' --progress 100 --limit=100 --txn-size 100 --bulk-delete --statistics --purge
复制数据到其他mysql实例,且不删除source的数据(指定字符集):
pt-archiver \
--source h=192.168.100.101,P=3306,u=admin,p='admin',D=db01,t=t01 \
--dest h=192.168.100.105,P=3306,u=admin,p='admin',D=db01,t=t01 \
--no-check-charset --where 'pkid>4000' --progress 100 --limit=100 --txn-size 100 --bulk-insert --bulk-delete --statistics --no-delete
复制数据到其他mysql实例,并删source上的旧数据(指定字符集):
pt-archiver \
--source h=192.168.100.101,P=3306,u=admin,p='admin',D=db01,t=t01 \
--dest h=192.168.100.105,P=3306,u=admin,p='admin',D=db01,t=t01 \
--no-check-charset --where 'pkid>0 and pkid<1000' --progress 100 --limit=100 --txn-size 100 --bulk-insert --bulk-delete --statistics --purge
导出数据到文件,但不删除源数据:
pt-archiver \
--source h=192.168.100.101,P=3306,u=admin,p='admin',D=db01,t=t01 \
--file '/root/2000-3000.txt' \
--no-check-charset --share-lock --where 'pkid between 2000 and 3000' --progress 100 --limit=100 --txn-size 100 --statistics --no-delete
同时导出数据到文件,和目标库,并删除数据库的相关行:
pt-archiver \
--source h=192.168.100.101,P=3306,u=admin,p='admin',D=db01,t=t01 \
--dest h=192.168.100.105,P=3306,u=admin,p='admin',D=db01,t=t01 \
--file '/root/1000-2000.txt' \
--no-check-charset --where 'pkid between 1000 and 2000' --progress 100 --limit=100 --txn-size 100 --bulk-insert --bulk-delete --statistics --purge
--------------------------------------------------------------------------------------------------------------
强制指定索引idx_code,通过参数i来指定索引名字,默认按PRIMARY走,数据大的时候非常慢
指定字符集utf8mb4
pt-archiver \
--source h=192.168.100.105,P=3306,u=admin,p='admin',D=db01,t=t01,A=utf8mb4,i=idx_code \
--dest h=192.168.100.101,P=3306,u=admin,p='admin',D=db01,t=t01,A=utf8mb4 \
--file '/root/code100to200.txt' \
--where 'code between 100 and 200' --progress 100 --limit=100 --txn-size 100 --bulk-insert --bulk-delete --statistics --no-delete
主键冲突数据归档,通过replace来解决
pt-archiver --source h='xx',P='3306',u='xx',p='xx',D='db_order',t='xx' --dest h='xx',P='3306',u='xx',p='xx',D='xx',t='xx' --charset=utf8mb4 --replace --where 'createTime<20180201000000' --progress 10000 --limit 10000 --statistics
通过dry-run来查看PT的执行计划,数据查询使用的索引
pt-archiver --source h='xx',P='3306',u='xx',p='xx',D='db_order',t='xx' --dest h='xx',P='3306',u='xx',p='xx',D='xx',t='xx' --charset=utf8mb4,i=index_createTime --replace --where 'createTime<20180201000000' --progress 10000 --limit 10000 --statistics --dry-run
02. pt-archiver的更多相关文章
- ORA-00257: archiver error. Connect internal only, until freed——解决
参考http://www.2cto.com/database/201109/104615.html, 开启归档后,操作一个大表迁移表空间,执行了1个多小时没完成就手动给中断了,但是再次用plsql登陆 ...
- ThinkPhp学习02
原文:ThinkPhp学习02 一.什么是MVC M -Model 编写model类 对数据进行操作 V -View 编写html文件,页面呈现 C -Controll ...
- pt工具主从一致性检查并修复以及版本3.0.4的版本缺点
pt-table-checksum和pt-table-sync分别检验master-slave的数据不一致并修复. 1.本次测试环境 [root@172-16-3-190 we_ops_admin]# ...
- 处理:“ORA-00257: archiver error. Connect internal only, until freed”的错误问题
注:本文参考了< ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法 > 一:问题背景: 今天在 ...
- ORA-00257: archiver error. Connect internal only, until freed【日志归档清理】
select * from V$FLASH_RECOVERY_AREA_USAGE; 查看使用情况 用plsql登陆时提示“ORA-00257: archiver error. Connect in ...
- [小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象
从这一篇开始,开始正式的介绍Selenium 以及相关的组件,本文的将讨论如下问题: Selenium基本的概念以及在企业化测试框架中的位置 Selenium核心对象(浏览器驱动) Web Drive ...
- 02:linux常用命令
1.1 linux查看系统基本参数常用命令 1.查看磁盘 [root@linux-node1 ~]# df -hl Filesystem Size Used Avail Use% Mounted on ...
- Kotlin中变量不同于Java: var 对val(KAD 02)
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...
- maven repo plugin archiver
Failure to transfer org.apache.maven:maven-archiver:pom:2.4.1 from http://repo1.maven.org/xxx was ca ...
- 【干货分享】前端面试知识点锦集02(CSS篇)——附答案
二.CSS部分 1.解释一下CSS的盒子模型? 回答一:a.标准的css盒子模型:宽度=内容的宽度+边框的宽度+加上内边具的宽度b.网页设计中常听的属性名:内容(content).填充(padding ...
随机推荐
- hive 安装centos7
wget mirror.bit.edu.cn/apache/hive/hive-2.3.4/apache-hive-2.3.4-bin.tar.gz 解压到/usr/local/apache-hive ...
- opencv 对RGB图像直接二值化
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- 无线LoRa远传智能水表
无线远传智能水表是一款基于瑞萨芯片的水表,该水表具有电子计数.无线远传功能.欠费关阀等功能,无线水表具有的功能如下:无线通信采用SX1278的LoRa进行点对点通信,SX1278模块在通信中启用CAD ...
- Linux 学习总结(二)
一.用户与用户组管理 1.添加用户 useradd 选项 用户名 -c 指定一段注释性描述 -d 目录,指定用户目录,若目录不存在,-m 选项可以创建目录 -g 指定用户所属用户组 -s 指定用户登陆 ...
- 超详细 Nginx 极简教程
什么是Nginx? Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向代理? 反向代理(Reverse Proxy ...
- pta l2-11(玩转二叉树)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805065406070784 题意:给定二叉树的结点个数n,其前 ...
- hdoj1004(查找众多字符串中个数最多的字符串)
Let the Balloon Rise. 最近开始刷hdoj,想通过写博客做做笔记,记录写过代码. Problem Description Contest time again! How excit ...
- NumPy 从已有的数组创建数组
NumPy 从已有的数组创建数组 本章节我们将学习如何从已有的数组创建数组. numpy.asarray numpy.asarray 类似 numpy.array,但 numpy.asarray 只有 ...
- C++中的构造函数
C++中的构造函数可以分为4类: (1)默认构造函数.以Student类为例,默认构造函数的原型为 Student()://没有参数 (2)初始化构造函数 Student(int num,int ag ...
- stark组件之过滤操作【模仿Django的admin】
一.先看下django的admin是如何实现过滤操作 首先在配置类中顶一个list_filter的列表,把要过滤的字段作为元素写i进去就可以了 class testbook(admin.ModelAd ...