关于数据传输:数据传输-如何配合-ptosc-使用-DTLE-同步-DDL

47次阅读

共计 2229 个字符,预计需要花费 6 分钟才能阅读完成。

作者:刘安

爱可生测试团队成员,次要负责 DTLE 开源我的项目相干测试工作,善于 Python 自动化测试开发。

本文起源:原创投稿

* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。


如何配合 pt-osc 应用 DTLE 同步 DDL

背景:在社区群里有同学询问,源库应用 pt-osc 做表 DDL 变更,DTLE 是否反对?

1. pt-osc 的原理

1). 创立一个与原表构造雷同的空表,表名是 _原表名_new
2). 批改步骤 1 创立的空表的表构造
3). 在原表上增加三个触发器:delete/update/insert,用于在复制数据过程中,将原表中的数据变更同步到_原表名_new
4). 将原表数据以数据块的模式复制到 _原表名_new
5). rename 原表 _原表名_old表,并把 _原表名_new 表 rename 为 原表 ,而后删除_原表名_old
6). 删除触发器

2. DTLE 对 DDL 的反对

依据 DTLE 的文档 https://actiontech.github.io/… 中的形容可知:

1). DTLE 反对 create/altert/drop table 语句
2). DTLE 尽管不反对同步触发器相干的 DDL,然而触发器产生的数据能够同步到指标端
3). DTLE 反对rename 语句

看来 DTLE 应该是反对 pt-osc 做表 DDL 变更的,接下就具体操作一下。

3. 操作步骤

1). 部署 DTLE 集群,这里应用的是 dtle-ce-4.22.01.0 版本
2). 在源端 MySQL 筹备一些数据
mysql> CREATE DATABASE action_db;

shell> sysbench /usr/share/sysbench/oltp_common.lua --mysql-host=172.100.9.1 --mysql-port=3306 --mysql-user=test --mysql-password=test --create_secondary=off --mysql-db=action_db --tables=1 --table_size=100000 prepare
3). 创立一个 DTLE 工作

留神此处须要将 _原表名_old 表和 _原表名_new 都退出都 DTLE 工作的同步范畴

job "test_pt_osc" {datacenters = ["dc1"]

  group "Src" {
    task "src" {
      driver = "dtle"
      config {
        ReplicateDoDb = [{
          TableSchema = "action_db"
          Tables = [{TableName = "sbtest1"},
          {TableName = "_sbtest1_new"},
          {TableName = "_sbtest1_old"}]
        }]
        ConnectionConfig = {
          Host = "172.100.9.1"
          Port = 3306
          User = "test_src"
          Password = "test_src"
        }
      }
    }
  }
  group "Dest" {
    task "dest" {
      driver = "dtle"
      config {
        ConnectionConfig = {
          Host = "172.100.9.2"
          Port = 3306
          User = "test_dest"
          Password = "test_dest"
        }
      }
    }
  }
}
4). 查看两端数据库的表构造

5). 源端 MySQL 继续增加数据
shell> sysbench /usr/share/sysbench/oltp_write_only.lua --mysql-host=172.100.9.1 --mysql-port=3306 --mysql-user=test --mysql-password=test --report-interval=3 --mysql-db=action_db --tables=1 --table_size=100000 --time=10 --rate=100 run
6). 在源端有数据流量的同时,执行 pt-osc 命令
shell> pt-online-schema-change --print --statistics --progress time,30 --user=test --password=test --alter 'modify c varchar(200) not null default""' --chunk-size=10000 --nocheck-replication-filters --host=172.100.9.1 --port=3306 D=action_db,t=sbtest1 --execute

在执行 pt-ost 命令期间,会有试图连贯源端 DTLE 的报错。这是因为 DTLE 伪装成 MySQL 从实例获取 binlog,而 pt-ost 会查看主从之间的提早造成的。此报错不会影响 pt-osc 的执行。

7). 查看 DDL 被正确同步以及数据的一致性

4. 总结

1). 应用 pt-osc 工具做表 DDL 变更 DTLE 是反对的
 

2). 尽管本例中指定了须要同步的表,实际上间接创立一个 Database 级别的工作也能够达到同 - 样的成果
 

3). 须要在创立 DTLE 工作的时候就布局好要同步的表,前期再另建工作同步 _old 表和 _new 表会造成数据不统一


如果在应用 DTLE 时发现了任何问题,请及时分割咱们。

DTLE repo:https://github.com/actiontech…

DTLE docs:https://actiontech.github.io/…

QQ 探讨群:852990221

正文完
 0