【Starrocks 异常解决】-- mysql flink sync to starrocks row error

1、异常信息

flink 1.20

starrocks 3.3.0

mysql 8.0

errorLog: Error: Target column count: 35 doesn't match source value column count: 28. Column separator: '\t', Row delimiter: '\n'. Row: 2025-05-22	6	23400055	214	dssd	1	1							1928	mm2er	360	20000.00000000	160.00000000	600000.00000000	340.00000000	20000	\N	2025-05-22T17:10:50	2025-05-22T17:51:47				abdcds
Error: Target column count: 35 doesn't match source value column count: 1. Column separator: '\t', Row delimiter: '\n'. Row: THE_BANK_OF_PUNJAB
Error: Target column count: 35 doesn't match source value column count: 1. Column separator: '\t', Row delimiter: '\n'. Row: STANDARD_CHARTERED_BANK_LTD
Error: Target column count: 35 doesn't match source value column count: 1. Column separator: '\t', Row del
### Flink CDC 将 MySQL 5.5 表数据实时同步到 MySQL 5.7 的解决方案 #### 一、背景介绍 Flink CDC 是一种基于 Apache Flink 构建的数据集成工具,能够实现数据库之间的增量和全量数据同步。它通过捕获源数据库中的变更日志(如 Binlog),并将其应用到目标数据库中来实现实时同步的功能。 对于从 MySQL 5.5 到 MySQL 5.7 的表数据实时同步场景,需要注意以下几个方面: 1. **MySQL 版本差异**:MySQL 5.5 和 5.7 存在一定的兼容性和功能差异[^3]。 2. **Binlog 格式支持**:MySQL 5.5 默认使用的 `ROW` 格式的 Binlog 能够被 Flink CDC 正确解析,但如果使用其他格式可能需要调整配置[^4]。 3. **时间戳字段处理**:由于 MySQL 5.7 对日期时间类型的严格模式增强,可能导致某些非法值(如 `'0000-00-00'`)无法写入目标库[^5]。 --- #### 二、技术方案详解 ##### 1. 环境准备 确保以下条件满足: - 源端 MySQL 5.5 启用了 Binlog 功能,并设置为 `ROW` 格式。 - 目标端 MySQL 5.7 数据库已创建好对应的 Schema 和 Table 结构。 - 安装并配置好 Flink 环境及其依赖项。 以下是关键的 MySQL 配置参数: ```sql -- 修改 MySQL 5.5 配置文件 my.cnf 或 my.ini [mysqld] server-id=1 binlog-format=ROW log-bin=mysql-bin ``` 重启 MySQL 服务使更改生效。 --- ##### 2. 创建 Flink Job 编写一个简单的 Flink CDC 作业脚本来完成数据同步任务: ###### (1) 添加 Maven 依赖 在项目的 `pom.xml` 文件中引入必要的依赖项: ```xml <dependencies> <!-- Flink Core --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-stream-java_2.12</artifactId> <version>1.15.0</version> </dependency> <!-- Flink CDC Connector --> <dependency> <groupId>com.ververica</groupId> <artifactId>flink-cdc-connectors</artifactId> <version>2.3.0</version> </dependency> <!-- MySQL Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> </dependencies> ``` ###### (2) 编写 Java/Flink Code 下面是一个完整的代码示例用于实现 MySQL 5.5 至 MySQL 5.7 的数据同步: ```java import com.alibaba.ververica.cdc.connectors.mysql.MySqlSource; import com.alibaba.ververica.cdc.debezium.DebeziumSourceFunction; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; public class MysqlCdcSync { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DebeziumSourceFunction<String> sourceFunction = MySqlSource.<String>builder() .hostname("source-mysql-host") // 替换为实际的 MySQL 5.5 主机地址 .port(3306) // 替换为实际的 MySQL 5.5 端口 .username("root") // 替换为实际的用户名 .password("password") // 替换为实际的密码 .databaseList("db_name") // 替换为目标数据库名称 .tableList("db_name.table_name") // 替换为具体的表名列表 .deserializer(new JsonDebeziumDeserializationSchema()) // 使用 JSON 序列化器 .build(); env.addSource(sourceFunction).print(); // 打印输出可以替换成 Sink 到 MySQL 5.7 env.execute("Flink CDC Sync from MySQL 5.5 to MySQL 5.7"); } } ``` --- ##### 3. 处理常见问题 针对可能出现的问题提供解决办法: ###### (1) 时间戳字段错误 当遇到类似 `ERROR 1292 (22007)` 错误时,可以通过修改 MySQL 5.7 的 SQL 模式禁用严格校验: ```sql SET GLOBAL sql_mode='NO_ZERO_DATE,NO_ZERO_IN_DATE'; ``` 这会允许 MySQL 接受零日期值或其他不符合标准的时间戳。 ###### (2) 权限不足 确保 MySQL 用户具有足够的权限访问 Binlog 日志: ```sql GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` ###### (3) 性能优化 为了提高性能,可以在 Flink 中启用 Checkpointing 并合理设置缓冲区大小: ```java env.enableCheckpointing(5000); // 每隔 5 秒触发一次 Checkpoint ``` --- #### 三、总结 以上介绍了如何利用 Flink CDC 实现从 MySQL 5.5 到 MySQL 5.7 的表数据实时同步过程。重点在于正确配置源端和目标端的 MySQL 参数,同时注意版本间的兼容性问题以及潜在的异常情况处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oo寻梦in记

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值