沈阳格力专卖店 发表于 2018-10-6 08:36:52

RDS for MySQL 如何使用 Percona Toolkit

  pt-online-schema-change 和 pt-archiver 工具均须指定 --no-version-check 选项方能搭配 RDS MySQL 实例使用。
  1. pt-online-schema-change
  pt-online-schema-change 提供在线修改表结构等功能,搭配 RDS 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 的产生和处理。


[*]  表及数据维护操作请在业务低峰期进行


[*]  添加字段
  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 实例表名称

[*]  删除字段
  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

[*]  修改字段
  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

[*]  添加索引

  pt-online-schema-change --no-version-check --execute--alter "add key>

[*]  删除索引

  pt-online-schema-change --no-version-check --execute--alter "drop key>  2. pt-archiver
  pt-archiver 是 Percona 官方提供的归档工具,用于归档大型表中的记录到另一个表或文件。
  2.1 归档到操作系统文件
  pt-archiver --source h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=my_tab -- --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 必须设置
  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                     -- 指定归档到的目标表
  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
  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 本次操作的统计信息。
  3、pt-table-checksum
  pt-table-checksum--nocheck-replication-filters --no-check-binlog-format   --databases=testh=xxx,u=test,p=test,P=3307

页: [1]
查看完整版本: RDS for MySQL 如何使用 Percona Toolkit