• RDS for MySQL 如何使用 Percona Toolkit


    Percona Toolkit 包含多种用于 MySQL 数据库管理的工具。

    下面介绍常用的 pt-online-schema-change  和  pt-archiver 搭配 RDS MySQL 的使用方法。

    注:

    • pt-online-schema-change 和 pt-archiver 工具均须指定 --no-version-check 选项方能搭配 RDS MySQL 实例使用。
    • 本文样例使用 Percona Toolkit 2.2.17 版本测试。
    • 本文样例仅做为样例使用,不承担任何因此示范导致的问题责任。具体操作手册请参考 Percona Toolkit 的相关文档。

    1. pt-online-schema-change 

    pt-online-schema-change 提供在线修改表结构等功能,搭配 RDS for MySQL 5.5 使用可以避免在修改表结构的过程中阻塞应用对表数据的访问。

    由于 RDS MySQL 5.6 支持 online-ddl 功能,可以直接在业务低峰期进行操作,也可以结合 pt-online-schema-change 使用。

    注:

    • 无论 RDS MySQL 5.5 还是 5.6 版本,也无论是否使用 pt-online-schema-change,在修改表结构过程中都有可能遇到等待表元数据锁的情况(waiting for table metadata lock)。如果出现这种情况,请参考 RDS MySQL 表上 Metadata lock 的产生和处理
    • 表及数据维护操作请在业务低峰期进行。

    样例用表:

    CREATE TABLE `x` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `password` varchar(10) DEFAULT NULL,
      `recommend_level` double(5,0) DEFAULT NULL,
      `name` varchar(30) DEFAULT '101' COMMENT 'change',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

    1.1 增加字段

    pt-online-schema-change --no-version-check --execute  --alter "add column c1 int" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x
    
    # h=xxx.mysql.rds.aliyuncs.com -- RDS 实例地址
    # P=3306                       -- RDS 实例端口
    # u=jacky                      -- RDS 实例用户
    # p=xxx                        -- RDS 实例用户密码
    # D=jacky                      -- RDS 实例数据库
    # t=x                          -- RDS 实例表名称

    1.2 删除字段

    pt-online-schema-change --no-version-check --execute  --alter "drop column c1" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x

    1.3 修改字段类型

    pt-online-schema-change --no-version-check --execute  --alter "modify column c1 bigint unsigned" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x

    1.4 添加索引

    pt-online-schema-change --no-version-check --execute  --alter "add key idx_c1 (c1)" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x

    1.5 删除索引

    pt-online-schema-change --no-version-check --execute  --alter "drop key idx_c1" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x

    2. pt-archiver

    pt-archiver 是 Percona 官方提供的归档工具,用于归档大型表中的记录到另一个表或文件。

    样例用表:

    CREATE TABLE `my_tab` (
      `id` bigint(11) NOT NULL AUTO_INCREMENT,
      `areaID` varchar(50) DEFAULT NULL,
      `area` varchar(60) DEFAULT NULL COMMENT '中文注释测试',
      `father` varchar(12) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `idx_area` (`area`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3162 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=8;

    2.1 归档到操作系统文件

    pt-archiver --source h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=my_tab --charset=utf8 --file '/var/tmp/%Y-%m-%d-%D.%t' --where "id > 3008" --limit 1000 --commit-each --no-version-check
    
    # h=xxx.mysql.rds.aliyuncs.com -- RDS 实例地址
    # P=3306                       -- RDS 实例端口
    # u=jacky                      -- RDS 实例用户
    # p=xxx                        -- RDS 实例用户密码
    # D=jacky                      -- RDS 实例数据库
    # t=my_tab                     -- RDS 实例表名称
    
    # --source                     -- 指定要被归档的数据源
    # --charset=utf8               -- 使用的字符集,需与表字符集一致;否则指定 --no-check-charset 参数
    # --file                       -- 指定目标操作系统文件名
    # --where "id > 3008"          -- 指定 where 过滤条件,过滤出要归档的数据
    # --limit 1000                 -- 每条语句读取和归档的数据行数,默认是 1
    # --commit-each                -- 每次获取和归档数据后,commit提交
    # --no-version-check           -- 不做版本检查,RDS MySQL 必须设置

    归档后,源表数据减少 150 行。

    归档操作系统文件中,包含 150 行数据。

    2.2 归档到另外一个表中

    可以将数据归档到同实例不同库下的表中,也可以将数据归档到不同实例下的表中。

    归档操作前,目标表要存在。

    2.2.1 归档到同实例不同库下的表

    pt-archiver --source h=rds01.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=my_tab --charset=utf8 --dest h=rds01.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=my_db,t=my_tab --where "id > 2000" --limit 1000 --commit-each --no-version-check
    
    # --dest                       -- 指定归档到的目标表

    目标表中增加了 1008 行数据。

    源表中减少了 1008 行数据,剩余 2000 行数据。

    2.2.2 归档到不同实例下的表

    pt-archiver --source h=rds01.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=my_tab --charset=utf8 --dest h=rds02.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=my_tab --where "id > 500" --limit 1000 --commit-each --no-version-check

    目标表中增加了 1500 行数据。

    源表中减少了 1500 行数据,剩余 500 行数据。

    2.2.3 通过 bulk insert 加速归档过程

    当需要归档的数据量很大,比如第一次做归档的时候,可以考虑通过尝试 bulk insert 的方式来加速归档过程。

    pt-archiver --source h=rds01.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=rd_test,t=large_tab_04 --charset=utf8 --dest h=rds02.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=large_tab_04 --where "1=1"  --limit 5000 --commit-each --bulk-insert --no-version-check --statistics
    
    # --bulk-insert                -- 批量插入数据,会自动启用 --bulk-delete --commit-each,每次插入行数通过--limit 选项指定
    
    

    # --statistics -- 显示 pt-archiver 本次操作的统计信息。

    实际示例:

    pt-online-schema-change --no-version-check --execute  --charset=utf8mb4 --alter " ADD COLUMN remarkName VARCHAR(50) DEFAULT NULL  COMMENT '备注名称' AFTER followCount"  h=127.0.0.1,P=3306,u=root,p=zh****456,D=deep_fashion_test,t=tb_blogger_tag
    
    
    
    pt-online-schema-change --no-version-check --execute  --charset=utf8mb4 --alter " ADD COLUMN  registerType tinyint(4) DEFAULT 0 COMMENT '注册类型,0-未指定/1-手机号/2-微信' AFTER registChannel"  h=127.0.0.1,P=3306,u=root,p=zh****6,D=deep_fashion_test,t=tb_users
     pt-online-schema-change --no-version-check --execute  --charset=utf8mb4 --alter "MODIFY COLUMN  updated_at TIMESTAMP  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP "  h=rm-bp1pj******8431j1.mysql.r.com,P=3306,u=zhi***min,p=Zh**pspdk82,D=ks_l***spider,t=ks_live_****minute
    

     

    pt-online-schema-change --no-version-check --execute  --charset=utf8mb4 --alter " add COLUMN gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别'"  h=rm-*****2188.mysql.rds.aliyuncs.com,P=3306,u=zhi***min,p=Z****2,D=spider,t=pop_patte****new
    

      

    执行命令后会有长时间的卡顿等待,需要等待会有相应执行的日志打印出来。

  • 相关阅读:
    makefile
    xcode
    centos
    debug
    服务器开发
    socket
    xcode
    调用cpp库更基本
    nodejs cpp动态库
    html5图片裁剪法--
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/9511873.html
Copyright © 2020-2023  润新知