帮你快速理解、总结文档立即下载

MySQL 数据源

最近更新时间:2026-09-29 10:24:00
我的收藏

概述

MySQL 是广泛使用的开源关系型数据库。DataBuddy 数据接入支持将 MySQL 作为来源端,覆盖离线同步、实时整库同步、分库分表同步等多种场景。本文介绍 MySQL 数据源在 DataBuddy 中的连接配置、能力支持范围、前提条件与常见问题。

支持的版本

类型
支持版本
自建 MySQL
5.6.x / 5.7.x / 8.0.x / 8.1.x / 8.2.x / 8.3.x / 8.4.x
腾讯云数据库 MySQL(CDB)
5.6 / 5.7 / 8.0

读取能力

能力
支持情况
说明
离线同步(读 / 写)
✓ / -
支持作为离线同步任务的源端读取数据;DataBuddy 数据源仅支持接入读取,不支持写入
实时同步(读 / 写)
✓ / -
支持作为实时同步任务的源端读取整库数据变更;DataBuddy 数据源仅支持接入读取,不支持写入
分库分表同步(读 / 写)
✓ / ✗
支持以分库分表方式读取多个分表数据;DataBuddy 数据源仅支持接入读取,不支持写入
完整数据源能力对照参见 支持的数据源与读取能力。

使用限制

实时同步限制

限制项
说明
Binlog 格式
仅支持 ROW 格式
binlog_row_image
必须设置为 FULL
Binlog 保留时间
建议至少保留 72 小时;全量数据量越大需保留越长
无主键表
无主键表无法保证 exactly-once 语义,可能存在数据重复
XA 事务
不支持 XA ROLLBACK,需手动处理相关表
只读库
不支持 5.6.x 以下版本的只读库实例
Functional Index
不支持包含 Functional Index 的表(MySQL 8.0 新特性)
级联删除
不支持同步级联删除的关联表记录
存储过程、物化视图
不支持读取
SET 数据类型
实时同步不支持
在线 DDL 工具
仅支持 gh-ost,不支持其他 DDL 在线变更工具

离线同步限制

限制项
说明
分表同步并发
多表同步切分单表时,任务并发数需大于表个数
存储过程
不支持读取

支持的字段类型

完整字段类型请参见 MySQL 官方文档。以下是 DataBuddy 在不同链路上的支持情况(节选 MySQL 8.0.x)。
字段类型
离线读
实时读
TINYINT / TINYINT UNSIGNED
✅
✅
SMALLINT / MEDIUMINT / INT / BIGINT(含 UNSIGNED)
✅
✅
FLOAT / DOUBLE / DECIMAL / NUMERIC
✅
✅
REAL
✅
✅
CHAR / VARCHAR / TEXT 系列
✅
✅
JSON
✅
✅
BINARY / VARBINARY / BLOB 系列
✅
✅
DATE / TIME / DATETIME / TIMESTAMP / YEAR
✅
✅
BIT / BOOL / BOOLEAN / ENUM
✅
✅
SET
✅
❌
GEOMETRY / POINT
✅
✅
LINESTRING / POLYGON / MULTIPOINT 等空间类型
✅
❌
说明:
空间类型(GEOMETRY 系列)按二进制读取,不解析几何语义;如需在目标端保留几何信息,建议先在源端转换为字符串类型。

字段类型映射(离线同步)

同步时源端字段类型会转换为 DataBuddy 内部类型(同步链路中的中间类型)。配置任务前请重点核对「备注」列标注的类型,避免精度丢失或语义变化。
源端类型
DataBuddy 内部类型
备注
BIT / BOOL / BOOLEAN
Boolean
BIT(n) 默认按布尔值读取;开启 useBitPrecision 且精度大于 1 时按 Bytes 读取
TINYINT(1)
Boolean
MySQL JDBC 驱动默认将 TINYINT(1) 按 BIT 处理(tinyInt1isBit=true),读取为 true / false;如需按数值读取,请在 JDBC URL 中追加 tinyInt1isBit=false
TINYINT / SMALLINT / MEDIUMINT / INT / BIGINT(含 UNSIGNED)
Long
按字符串读取后转为 Long;BIGINT UNSIGNED 超过 Long 取值上限时会读取失败
DECIMAL / NUMERIC
Double
转为双精度浮点数,超出精度范围会丢失小数精度;对精度敏感的场景建议在目标端改用 Decimal 或字符串类型
FLOAT / REAL / DOUBLE
Double
遵循 IEEE 754 浮点精度
CHAR / VARCHAR / TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT
String
-
ENUM / SET
String
按枚举值文本读取
JSON
String
按文本读取,不做结构化解析
DATE
Date
精确到日
DATETIME / TIMESTAMP
Date
-
TIME
Date
超出 JDBC 时间范围的值(如 838:59:59)按 String 读取
YEAR
Long
按年份数值读取
BINARY / VARBINARY / TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB
Bytes
不做内容解析
GEOMETRY / POINT / LINESTRING / POLYGON 等空间类型
Bytes 或 String
不解析几何语义,建议先在源端转换为字符串
上表未列出的其他类型
-
任务报错并提示不支持的字段类型

字段类型映射(实时同步)

实时同步(整库多表 / 分库分表)由 CDC 连接器解析源端类型并写入 TCLake。下表为自动建表时目标表实际使用的字段类型 ,配置任务前请重点核对「备注」列标注的类型。
源端类型
TCLake 目标类型
备注
TINYINT / TINYINT UNSIGNED / SMALLINT(含 UNSIGNED)/ MEDIUMINT(含 UNSIGNED)/ INT / INTEGER
INTEGER
ZEROFILL 与对应 UNSIGNED 版本映射相同
TINYINT(1)
BOOLEAN 或 INTEGER
取决于参数 oceanus.tinyint1-is-bit:为 true 时映射 BOOLEAN,否则映射 INTEGER
INT UNSIGNED / INTEGER UNSIGNED / BIGINT
LONG
-
BIGINT UNSIGNED / SERIAL
DECIMAL(20, 0)
取值超出 BIGINT 上限,改用十进制承载
DECIMAL / NUMERIC / FIXED(精度 ≤ 38)
DECIMAL(P, S)
精度与标度保留
FLOAT(无精度)
FLOAT
-
FLOAT(有精度)/ FLOAT UNSIGNED / DOUBLE / DOUBLE PRECISION / REAL(含 UNSIGNED、ZEROFILL)
DOUBLE
带精度的 FLOAT 落 DOUBLE,与无精度不同
BIT(n)
BINARY
按位串读取,如 0101100011
DATE
DATE
-
DATETIME / DATETIME(n)
TIMESTAMP
不带时区
TIMESTAMP / TIMESTAMP(n)
TIMESTAMPTZ
带时区语义,与 DATETIME 落点不同
TIME
STRING
不落时间类型
YEAR
INTEGER
-
CHAR / VARCHAR / TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT
STRING
-
ENUM / JSON
STRING
按文本读取,不解析结构
BINARY(n)
BINARY
-
VARBINARY(n) / TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB
STRING
二进制按字符串承载,与 BINARY(n) 落点不同
GEOMETRY / POINT
STRING
不解析几何语义

说明:
离线与实时两条链路的类型体系不同,同一源端类型可能落到不同目标类型。例如 BIGINT UNSIGNED:离线按 Long 读取(超出上限会失败),实时落 DECIMAL(20, 0)。请按任务类型核对对应表格。
上表目标类型即 TCLake 自动建表时使用的字段类型;如需调整,可在任务的字段映射中修改,参见 实时整库多表任务配置。
上表仅列出已确认的映射,未列出的类型请以实际建表结果为准。

实时同步支持的 DML / DDL

DML

操作
是否支持
INSERT / DELETE / UPDATE
✅

DDL

操作
是否支持
支持的语法示例
新增列(ADD COLUMN)
✅
ALTER TABLE t ADD col TYPE [FIRST | AFTER col]
删除列(DROP COLUMN)
✅
ALTER TABLE t DROP [COLUMN] col
重命名列(RENAME / CHANGE COLUMN)
✅
ALTER TABLE t CHANGE old new TYPE
修改列类型(MODIFY COLUMN)
✅
ALTER TABLE t MODIFY col TYPE
新增表(CREATE TABLE)
✅
不支持 CHECK、Temporary Table
重命名表 / 删除表 / 清空表
❌

DDL 变更响应仅在增量阶段 生效;删除表、重命名表 这类高危操作目标端通常不支持自动响应。详细的 DDL 变更响应策略(自动变更、忽略、日志告警)参见 实时整库多表任务配置。

前提条件

1. 配置账号权限

离线同步 :
CREATE USER 'wedata_user'@'%' IDENTIFIED BY 'your_password';
GRANT SELECT ON your_database.* TO 'wedata_user'@'%';
FLUSH PRIVILEGES;
实时同步 :
CREATE USER 'wedata_cdc_user'@'%' IDENTIFIED BY 'your_password';
GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT
ON *.* TO 'wedata_cdc_user'@'%';
FLUSH PRIVILEGES;
建议为同步任务创建专用账号,避免与业务账号混用。

2. 开启 Binlog(仅实时同步)

SHOW VARIABLES LIKE 'log_bin'; -- ON 表示已开启
腾讯云 MySQL 默认开启 Binlog。自建实例需在 my.cnf 中配置:
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=ROW
binlog_row_image=FULL
修改后需重启数据库使其生效。

3. 设置会话超时(推荐)

针对大库全量同步,建议放开会话超时:
SET GLOBAL interactive_timeout = 28800;
SET GLOBAL wait_timeout = 28800;

创建数据源

操作步骤

1. 登录 DataBuddy 控制台。
2. 在顶部切换到目标地域和 Workspace。
3. 进入 数据集成 > 数据源管理 (或 平台管理 > 数据源管理 )。
4. 点击 添加数据源 ,选择 MySQL 。
5. 填写连接配置与认证信息,详见 参数说明。
6. 点击 连通性测试 (参见 数据源连通性测试)。
7. 测试通过后点击 保存 或 保存 & 创建任务 。

参数说明

参数
说明
是否必填
默认值
数据源名称
数据源在工作空间内的唯一标识
是
-
连接方式
串连接 / 腾讯云实例
是
串连接
JDBC URL
串连接方式下的连接串,格式 jdbc:mysql://host:port/database
串连接必填
-
地域、实例
腾讯云实例方式下选择实例
腾讯云实例必填
-
用户名
数据库连接账号
是
-
密码
数据库连接密码(支持 SSM 凭证托管)
是
-
数据源版本
5.6 / 5.7 / 8.0.x
是
-
JDBC URL 示例:
jdbc:mysql://10.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai

在数据接入任务中使用

实时整库、分库分表

配置项
说明
来源表范围
指定表 (仅同步选中的表,新增表需重启)/ 正则匹配 (指定库名 + 表名正则,符合规则的新增表自动接入)
读取模式
全量 + 增量 / 仅增量
订阅类型
可勾选 INSERT / UPDATE / DELETE,至少保留一种
gh-ost 同步
是否同步 gh-ost 在线 DDL 产生的临时表

离线单表

配置项
说明
数据来源
已配置的 MySQL 数据源
库 / 表
支持指定与正则匹配;表名支持范围如 table_[0-99]
切割键
仅支持整型字段;建议选择主键或带索引的列;避免 COLLATE 列
筛选条件
标准 WHERE 语法,支持时间参数(如 gmt_create > $bizdate)
详细任务配置参见 表到表同步 与 实时整库多表任务配置。

最佳实践

实践
建议
账号权限最小化
为同步任务创建专用账号,仅授必要权限,不使用 root
Binlog 保留时间
至少 72 小时;大表全量同步建议更长
切割键选择
主键或索引列;避免 COLLATE 列以防数据重复
网络打通
优先使用内网连接,提升传输性能

主备切换处理(实时同步)

实时同步任务在 MySQL 主备切换场景下能否平滑恢复,取决于地址类型与是否开启 GTID:
场景
处理方式
腾讯云数据库 MySQL(实例地址不变)
闪断秒级,任务自动重连新主,从最近快照位点继续;故障 failover 自动完成,无需人工干预
自建 MySQL + VIP / DNS
VIP / DNS 漂移到新主后任务自动重连;建议任务重试次数 ≥ 3
自建 MySQL + 固定 IP
切换前暂停任务,切换后修改数据源 IP,再继续运行
强烈建议开启 GTID :主备切换场景下基于 GTID 恢复才能保证不重复、不丢数据。
异步复制下主库故障可能丢失最后几个未同步的事务,这是 MySQL 复制层本身的限制;如需零丢失,建议使用强同步或半同步复制。

常见问题

Q:报错 A slave with the same server_uuid/server_id as this slave has connected to the master?

A:多个同步任务使用了相同的 server-id。系统已优化为随机生成 server-id,如旧任务在高级参数中显式配置了 server-id,请删除该参数。

Q:报错 Cannot replicate because the master purged required binary logs?

A:MySQL 上的 Binlog 文件已被清理。请增加 Binlog 保留时间,或优化作业并发以加速消费。

Q:报错 Connection reset by peer 或连接超时?

A:网络问题或作业反压导致空闲超时。可调大 slave_net_timeout(如 120),或优化作业并行度与内存。

Q:JobManager OOM?

A:数据量大或主键范围分布稀疏导致切分过多。可:
调大 JobManager CU。
调整高级参数 scan.incremental.snapshot.chunk.size(默认 8096)。
调整 split-key.even-distribution.factor.upper-bound。

Q:实时任务运行期间,将 MySQL 的 binlog_format 从 ROW 改为 STATEMENT 会怎样?

A:实时任务仅在启动时校验 binlog_format=ROW,运行期间不再检查。切换为 STATEMENT 后,所有 DML 都会被解析器视为 DDL,下游无法感知数据变更,造成静默数据缺失。请在任务运行期间不要修改 binlog_format。

Q:使用 COLLATE 列作为切割键,部分数据重复?

A:COLLATE 影响排序、筛选与分组结果。设置切割键时请选择非 COLLATE 列。

Q:是否支持 gh-ost 在线 DDL?

A:支持。开启 gh-ost 同步开关后,会监控并同步 *_gho 临时表的变更。前提条件:gh-ost 能正常访问 MySQL;腾讯云 CDB 需在 gh-ost 命令中追加 --aliyun-rds 参数。

相关文档