zoukankan      html  css  js  c++  java
  • 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

    wechat: nick753159 qq: 417966852 email: nzq42@qq.com base: shanghai
  • 相关阅读:
    tar命令详解(很好的中文说明) zhumao
    Grep学习笔记(转载) zhumao
    Linux命令集(转载) zhumao
    GNU/Linux问题集 (好文章,好手册) zhumao
    Sed学习笔记(转载) zhumao
    加密和显示图片的PHP代码(可以使用) zhumao
    用wget使用认证用户从ftp站点下载文件 zhumao
    Sendmail学习笔记 ... (转载) zhumao
    一段垃圾代码,自己写的(发送图书馆新书通告) zhumao
    CLR自定义.NET控件制作(2)——添加自定义属性、方法和事件
  • 原文地址:https://www.cnblogs.com/cyberbit/p/pt-archiver.html
Copyright © 2011-2022 走看看