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

MySQL 数据源

最近更新时间:2026-09-11 20:42:31
我的收藏

概述

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
JDBC Driver
8.0.21

读取能力

能力
离线读
实时整库读
分库分表读
支持
完整数据源能力对照参见 支持的数据源与读取能力

使用限制

实时同步限制

限制项
说明
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 系列)支持有限,建议转换为字符串类型后再同步。

实时同步支持的 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 URL
串连接方式下的连接串,格式 jdbc:mysql://host:port/database
串连接必填
地域、实例
腾讯云实例方式下选择实例
腾讯云实例必填
用户名
数据库连接账号
密码
数据库连接密码(支持 SSM 凭证托管)
数据源版本
5.6 / 5.7 / 8.0.x
高级参数
连接级扩展参数,如 useUnicodecharacterEncodingserverTimezoneconnectTimeout
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 参数。

相关文档