数据同步概述

最近更新时间:2019-09-04 15:40:31

数据同步要求

数据同步功能支持两个数据源之间的数据实时同步,可应用于本地数据灾备、查询与报表分流、商业智能分析(BI)及实时数据仓库等多种业务场景。

支持同步的实例类型

源实例类型 目标实例类型
【公有云】云数据库 MariaDB/MySQL 【公有云】云数据库 MariaDB/MySQL
【公有云】云数据库 PostgreSQL
【公有云】消息队列 Ckafka
【专有云】云数据库 MariaDB/MySQL
【公有云】分布式数据库 【公有云】分布式数据库
【公有云】消息队列 Ckafka
【专有云】分布式数据库

支持的同步拓扑
数据库同步功能支持“一对一单向同步、一对多单向同步、级联单向同步、多对一单向同步”的串行拓扑,不支持“双向环状同步”拓扑。

支持的实例版本

  • MariaDB 10.0、10.1
  • MySQL 5.6、5.7
  • PostgreSQL 9.6
  • Ckafka 所有版本

支持的同步语法

  • DML 操作:INSERT、UPDATE、DELETE。
  • DDL 操作:CREATE TABLE、ALTER TABLE、ADD COLUMN、DROP COLUMN、RENAME COLUMN。

数据库同步对象
同步对象支持精确匹配数据库、表;支持正则匹配数据库、表。暂不支持非数据表对象,如存储过程、视图、索引、触发器等,如需非数据表对象请在目标端手动创建。

数据库同步费用
数据库同步功能目前免费。

数据库同步网络
目前仅支持腾讯云同地域内数据库实例之间及专线内的数据库同步。跨地域的数据同步或灾备需 提交工单,工单请备注两地实例 ID 和同步需求,审批通过后方可开启。

数据同步功能

数据类型转换

MariaDB/MySQL 到 PostgreSQL 的同步

MariaDB/MySQL 与 PostgreSQL 的数据类型不同,数据库同步工具将按如下规则进行转换:

MariaDB/MySQL 数据类型 同步到 PostgreSQL 后的数据类型
tinyint/smallint smallint
mediumint/int integer
bigint bigint
real/double double precision
float float
bit bit
bool/boolean boolean
char/varchar char/varchar
binary/varbinary text
year/date/time/datetime/timestamp timestamp without time zone
tinyblob/mediumblob/blob/longblob/long bytea
mediumtext/text/longtext text
decimal/numeric decimal/numeric
enum integer
说明:

表中所述类型的列在转换过程中数据长度保持不变,表中未列出类型在转换过程中保持不变。

MariaDB/MySQL 到分布式数据库的同步

MariaDB/MySQL 与分布式数据库的数据类型相同,不存在数据类型转换情况。

MariaDB/MySQL 到 CKafka 的同步

相关数据将转换为 JSON 格式,请参见 Binlog 日志消费格式

分布式数据库到 CKafka 的同步

相关数据将转换为 JSON 格式,请参见 Binlog 日志消费格式

数据订阅功能

数据同步到 Ckafka 已支持数据订阅,配置前需先购买 Ckafka,详细介绍请参见 消息队列 CKafka,配置建议如下:

  • 规格
    可通过计划同步的实例每日更新数据量、日均峰值或平均值、计划保留在 Ckafka 的时间来评估 Ckafka 实例规格。
    例如,某实例每日更新1000万行,每行数据2KB,日均写入峰值为2万行每秒,期望 Ckafka 选用3副本,存储数据3天。
    则该实例每日更新数据20GB,转换为 JSON 后约30GB,存储3天,3副本约需要空间270GB,数据库写入峰值带宽约39MB/s,Ckafka 选3副本的吞吐量约117MB/s,选择 Ckafka 的标准型即可基本满足需求。

  • 网络
    建议与源实例处于相同的 VPC 网络下。

  • topic 选择
    一个同步任务需占用1个 topic,多个同步任务需分别选择多个且不同的 topic,否则可能导致数据混乱。

  • 参数选择
    以下建议仅供参考,具体请根据实际需求选择。

    • 分区数(partition):1
    • 副本数:3
    • cleanup.policy:删除
    • min.isync.replicas:2
    • unclean.leader.election.enable:false
  • 数据一致性
    由于网络中断或其他原因,数据库实例生产到 Ckafka 的消息可能重复,此时消费端重放数据时,可以采用幂等方式消除。

    说明:

    幂等,即多次重复执行消息时,最终数据一致,当遇到主键冲突的记录时,先进行 delete 再 insert,如果 update 无法匹配到数据,会强行插入;delete 找不到数据,直接跳过。通过幂等方案即可以实现数据消费一致性。使用幂等时表必须要有主键或有不能为 NULL 值的唯一索引。