前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据传输 | 如何配合 pt-osc 使用 DTLE 同步 DDL

数据传输 | 如何配合 pt-osc 使用 DTLE 同步 DDL

作者头像
爱可生开源社区
发布2022-05-23 08:49:30
4400
发布2022-05-23 08:49:30
举报
文章被收录于专栏:爱可生开源社区

作者:刘安

爱可生测试团队成员,主要负责 DTLE 开源项目相关测试任务,擅长 Python 自动化测试开发。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

背景:在社区群里有同学询问,源库使用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/dtle-docs-cn/3/3.6_DDL.html中的描述可知:

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准备一些数据
代码语言:javascript
复制
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任务的同步范围

代码语言:javascript
复制
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持续添加数据
代码语言:javascript
复制
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命令
代码语言:javascript
复制
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表会造成数据不一致

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱可生开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. pt-osc的原理
  • 2. DTLE对DDL的支持
  • 3. 操作步骤
  • 4. 总结
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档