数据集成同步异常解决手册
- 数据集成同步异常解决手册
目录
一、数据源连接问题
1. MySQL相关问题
1.1 连接认证异常
错误信息: Read split MySqlBinlogSplit{splitId='binlog-split', ...} error due to Unable to connect to the MySQL database at 124.71.177.180:3306 with user 'root': unexpected sequence #1.
问题原因:
- 客户端数据库连接数不足
- 网络抖动导致连接不稳定
- 数据库负载过高
解决方案:
- 清理数据库中的空闲连接
- 扩充数据库的最大连接数限制
- 检查网络连接的稳定性,确保无丢包和高延迟
1.2 版本兼容问题
错误信息: Synchronizing error: Public Key Retrieval is not allowed
问题原因:
- Flink CDC与MySQL 8.0的认证方式不兼容
- sha256_password认证方式需要通过TLS或RSA公钥加密保护密码
解决方案:
更改MySQL用户的认证方式: ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; FLUSH PRIVILEGES;
在my.ini文件中添加配置: [mysqld] default_authentication_plugin=mysql_native_password
1.3 主键索引问题
错误信息: Specified key was too long; max key length is 767 bytes
问题原因:
- MySQL 5.6中InnoDB存储引擎对索引长度限制为767字节
- utf8mb4字符集下varchar(255)会超出限制:
- utf8mb4每个字符占4字节
- varchar(255) * 4 = 1020字节 > 767字节限制
解决方案:
- 减少varchar字段长度:
- 将主键字段长度从255修改为191或更小
- 191 * 4 = 764字节 < 767字节限制
- 或更改字符集: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
1.4 数据同步配置问题
错误信息: 开启同步任务后数据不同步
问题原因:
- binlog未开启
- binlog格式配置不正确
- binlog保留时间不足
解决方案:
检查并开启binlog: SHOW VARIABLES LIKE 'log_bin';
设置正确的binlog格式: SET GLOBAL binlog_format = 'ROW';
调整binlog保留时间: SET GLOBAL expire_logs_days = 7;
1.5 主从复制错误
错误信息: A slave with the same server_uuid/server_id as this slave has connected to the master
问题原因:
- 多个从库使用相同的server_uuid或server_id
- 主从同步配置冲突
- 复制连接未正常关闭
解决方案:
确保从库配置唯一性:
- 检查并修改server_id
- 验证server_uuid唯一性
重置复制状态: STOP SLAVE; RESET SLAVE; START SLAVE;
1.6 CDC数据解析错误
错误信息: Failed to deserialize data of EventHeaderV4
问题原因:
- CDC数据格式不兼容
- 数据解析过程中断
- 事务日志不完整
解决方案:
检查数据库配置: SET GLOBAL slave_net_timeout = 120; SET GLOBAL thread_pool_idle_timeout = 120;
确保事务日志完整性:
- 检查binlog是否完整
- 验证CDC追踪状态
1.7 时区配置不匹配
错误信息: ValidationException: The MySQL server has a timezone offset (0 seconds ahead of UTC) which does not match the configured timezone GMT+08:00.
问题原因:
- 数据库服务器时区设置与应用配置不一致
- 时区转换错误
- 默认时区配置问题
解决方案:
检查MySQL时区设置: SHOW VARIABLES LIKE '%time_zone%';
修改数据库时区: SET GLOBAL time_zone = '+8:00'; SET time_zone = '+8:00';
1.8 字符集编码问题
错误信息: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x81' for column
问题原因:
- 数据库字符集不支持特殊字符
- 连接字符集配置不正确
- 表字段字符集与连接字符集不匹配
解决方案:
修改数据库字符集: ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改表字符集: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1.9 内存使用过高
错误信息: The table 'xxx' is full
问题原因:
- temp_table_size 和 max_heap_table_size 设置过小
- 同步过程中产生大量临时表
- 系统内存不足
解决方案:
增加临时表空间: SET GLOBAL tmp_table_size = 67108864; SET GLOBAL max_heap_table_size = 67108864;
优化查询避免使用临时表
2. Oracle相关问题
2.1 监听连接异常
错误信息: ORA-12516, TNS:listener could not find available handler with matching protocol stack
问题原因:
- 数据库连接池中的并发连接数超过了监听程序的处理能力
- 服务器资源不足(CPU、内存、磁盘空间等)
- 网络连接不稳定
解决方案:
- 检查并调整数据库连接池配置,增加最大并发连接数
- 确保服务器资源充足:
- 检查CPU使用率
- 增加内存分配
- 确保磁盘空间充足
- 检查网络连接的稳定性,确保无丢包和高延迟
2.2 CDC字段解析错误
错误信息: DataException: file is not a valid field name
问题原因:
- Oracle CDC 3.0及以下版本在处理某些特殊字段时存在bug
- 字段命名不规范导致解析失败
解决方案:
- 检查表结构,避免使用Oracle保留关键字作为字段名
- 参考Issue:https://github.com/apache/flink-cdc/pull/2315
2.3 表主键识别问题
错误信息: Oracle数据库表存在主键,但系统提示找不到主键
问题原因:
- 数据库账户缺少读取schema的权限
- 主键定义不规范
解决方案:
授予用户以下权限: GRANT SELECT ON ALL_CONSTRAINTS TO username; GRANT SELECT ON ALL_CONS_COLUMNS TO username; GRANT SELECT ON ALL_TAB_COLUMNS TO username;
检查主键定义: SELECT constraint_name, constraint_type, table_name FROM user_constraints WHERE table_name = 'YOUR_TABLE';
2.4 表空间不足
错误信息: ORA-01653: unable to extend table xxx by xxx in tablespace xxx
问题原因:
- 表空间空间不足
- 数据文件无法自动扩展
- 磁盘空间不足
解决方案:
检查表空间使用情况: SELECT tablespace_name, bytes/1024/1024 MB, maxbytes/1024/1024 MAX_MB, user_bytes/1024/1024 USED_MB FROM dba_data_files;
增加数据文件: ALTER TABLESPACE tablespace_name ADD DATAFILE 'path/filename.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M;
2.5 归档日志空间不足
错误信息: ORA-00257: archiver error. Connect internal only, until freed
问题原因:
- 归档目的地空间不足
- 归档日志未及时清理
- 归档产生速度过快
解决方案:
检查归档日志使用情况: SELECT * FROM v$flash_recovery_area_usage;
清理归档日志: RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3';
3. SQLServer相关问题
3.1 SSL连接失败
错误信息: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "PKIX path building failed"
问题原因:
- SQL Server驱动试图建立SSL加密连接失败
- 证书验证路径构建失败-
- 默认情况下驱动会尝试使用SSL加密连接
解决方案:
在数据源配置中添加参数:
- encrypt=false
- trustServerCertificate=true
或配置正确的证书:
- 导入SQL Server的SSL证书
- 确保证书链完整
3.2 CDC同步异常
错误信息: SQLServer数据库及表已启用CDC,但创建同步任务后无增量数据同步
问题原因:
- 数据库恢复模式被修改为简单模式
- CDC功能需要数据库处于完整恢复模式才能正常工作
- CDC代理作业未运行
解决方案:
检查并修改数据库恢复模式: ALTER DATABASE YourDatabase SET RECOVERY FULL;
验证CDC是否正常: SELECT name, is_cdc_enabled FROM sys.databases WHERE database_id = DB_ID();
SELECT name, is_tracked_by_cdc FROM sys.tables WHERE object_id = OBJECT_ID('YourTable');
- 检查CDC代理作业: EXEC sys.sp_cdc_help_jobs;
3.3 事务日志满
错误信息: Could not allocate space for object in database 'xxx' because the 'PRIMARY' filegroup is full
问题原因:
- 事务日志空间不足
- 事务日志未及时备份
- 大事务导致日志增长过快
解决方案:
检查日志空间: DBCC SQLPERF(LOGSPACE);
收缩日志文件: BACKUP LOG DatabaseName WITH TRUNCATE_ONLY; DBCC SHRINKFILE(LogFileName);
3.4 死锁问题
错误信息: Transaction (Process ID xx) was deadlocked on lock resources with another process and has been chosen as the deadlock victim
问题原因:
- 并发事务互相等待资源
- 事务执行时间过长
- 锁升级导致死锁
解决方案:
查看死锁信息: SELECT * FROM sys.dm_tran_locks;
优化事务处理:
- 减少事务范围
- 统一访问顺序
- 添加适当的索引
4. PostgreSQL相关问题
4.1 版本兼容问题
错误信息: PG 9.6版本同步任务无法同步数据
问题原因:
- PostgreSQL 9.6版本不支持pgoutput编解码扩展
- 部分同步功能需要更高版本支持
- 复制槽配置不正确
解决方案:
- 安装并配置wal2json插件: CREATE EXTENSION IF NOT EXISTS wal2json;
- 修改postgresql.conf配置:
- wal_level = logical
- max_replication_slots = 10
- max_wal_senders = 10
- 检查复制槽状态:
- SELECT * FROM pg_replication_slots;
4.2 连接数超限
错误信息: FATAL: remaining connection slots are reserved for non-replication superuser connections
问题原因:
- 达到max_connections限制
- 连接未及时释放
- 连接池配置不合理
解决方案:
检查当前连接: SELECT * FROM pg_stat_activity;
调整连接数限制: ALTER SYSTEM SET max_connections = '200';
4.3 复制延迟过大
错误信息: ERROR: replication slot "xxx" is active but not used for too long
问题原因:
- 网络带宽不足
- 源库写入压力大
- 复制进程负载高
解决方案:
监控复制延迟: SELECT slot_name, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) as replication_lag FROM pg_replication_slots;
优化复制配置: ALTER SYSTEM SET max_wal_senders = 10; ALTER SYSTEM SET wal_keep_segments = 64;
5. MongoDB相关问题
5.1 副本集同步问题
错误信息: 聚合表预览有数据,正式发布保存无数据
问题原因:
- MongoDB副本集未开启
- MongoDB版本过低
- 复制集配置不正确
解决方案:
开启MongoDB副本集: rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "localhost:27017" } ] })
确认MongoDB版本,建议升级到4.0以上版本
验证复制集状态: rs.status()
5.2 Oplog窗口问题
错误信息: Cannot find timestamp in oplog greater than or equal to timestamp
问题原因:
- Oplog大小设置过小
- 同步延迟导致Oplog数据过期
- 复制集负载过高
解决方案:
检查Oplog状态: db.printReplicationInfo()
调整Oplog大小: db.adminCommand({ "replSetResizeOplog": 1, "size": 16384 })
5.3 认证失败
错误信息: Authentication failed for user xxx
问题原因:
- 用户认证机制不匹配
- 权限不足
- 认证数据库错误
解决方案:
检查用户权限: db.getUser("username")
授予必要权限: db.grantRolesToUser("username", ["readWrite", "XXX"] )
二、目的地连接问题
1. 明道云工作表问题
1.1 Topic相关异常
错误信息:
Topic不存在: Failed to write records to Kafka: Topic(tableSyncTopic) not present in metadata after 30000 ms
Topic分区异常: org.apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition
Topic连接超时: org.apache.kafka.common.errors.TimeoutException: Expiring records after 30000ms
Topic授权失败: org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [xxx]
问题原因:
- Topic未创建或已被删除
- Kafka集群异常或重平衡
- 网络连接不稳定
- 权限配置问题
- Broker节点异常
统一解决方案:
- 重新发布任务流程:
- 进入数据集成页面
- 找到对应的同步任务
- 点击"更新发布"
- 等待任务重新发布完成
- 启动任务验证同步情况
- 请求运维支持:
- 提供任务ID
- 提供具体错误信息
- 说明问题发生时间点
- 运维协助检查集成环境
1.2 新增数据异常
错误信息:
- 主键重复:
- 删除标记异常:
问题原因:
- 主键重复
- 包含正常行记录的重复
- 包含回收站中的重复
- 删除操作问题
- 非物理删除标识导致的问题
- 先删除后新增的顺序问题
- 大批量新增问题
- 合并多表同步数据
- 重复发布导致的全量新增
- 数据推送顺序问题
解决方案:
- 检查数据情况:
- 验证主键是否重复
- 确认回收站数据状态
- 检查删除标记的准确性
- 调整同步策略:
- 考虑分批同步数据
- 调整推送顺序
- 优化删除处理逻辑
1.3 更新数据异常
错误信息:
- 主键数据不存在:
- 操作顺序异常:
问题原因:
- 数据状态问题
- 数据已物理删除
- 数据已进入回收站
- 复合操作问题
- 先新增后删除的顺序问题
- 非物理删除标识导致的问题
- 推送数据顺序混乱
解决方案:
- 数据状态检查:
- 确认数据是否真实删除
- 检查回收站数据状态
- 验证数据更新条件
- 优化同步策略:
- 调整操作顺序
- 规范删除标识使用
- 优化数据推送逻辑
1.4 覆盖更新异常
错误信息:
- 唯一索引冲突:
- 数据匹配失败:
问题原因:
- 工作表系统字段thirdprimary(三方主键)唯一索引冲突
- 切换了主键映射的表字段
- 新字段找不到数据时会走新增逻辑
- 新增遇到唯一索引导致失败
- 去重依据字段问题
- controlIdForIdentifyDuplicate字段为空
- 推送去重字段配置错误
- 去重依据字段匹配到多条数据
解决方案:
- 重新发布任务时的注意事项:
- 确认源表主键字段是否变更
- 验证去重依据字段的唯一性
- 检查工作表中数据情况
- 必要时先清空目标工作表
- 运维支持:
- 检查工作表服务状态
- 查看具体错误日志
- 协助处理数据冲突
2. MySQL目的地问题
2.1 表空间已满异常
错误信息: The table 'xxx' is full; Error Code: 1114
问题原因:
- 磁盘空间不足
- 数据文件增长受限
- 表空间配置限制
- innodb_data_file_path配置不合理
解决方案:
检查空间使用情况: SELECT table_schema, table_name, data_length/1024/1024 as data_mb, index_length/1024/1024 as index_mb FROM information_schema.TABLES WHERE table_schema = 'your_database';
联系运维处理:
- 清理磁盘空间
- 扩容数据目录
- 调整表空间配置
2.2 唯一索引冲突
错误信息: Duplicate entry 'xxx' for key 'xxx'
问题原因:
- 源数据存在重复记录
- 未正确处理主键或唯一键
- 数据同步顺序问题
- 更新策略配置不当
解决方案:
检查源数据: SELECT column_name, COUNT() FROM table_name GROUP BY column_name HAVING COUNT() > 1;
调整同步任务:
- 修改更新策略
- 调整同步条件
- 优化数据处理逻辑
2.3 字段长度溢出
错误信息: Data too long for column 'xxx' at row xxx
问题原因:
- 目标字段长度小于源字段
- 字符集编码不一致
- 数据转换问题
- 特殊字符处理问题
解决方案:
检查字段定义: SHOW CREATE TABLE table_name;
调整字段长度: ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR(适当长度);
检查字符集: SHOW VARIABLES LIKE 'character%';
3. Oracle目的地问题
3.1 字段值超长异常
错误信息: ORA-12899: value too large for column xxx
问题原因:
- 字段定义长度不足
- 字符集转换导致长度变化
- 数据类型不匹配
解决方案:
检查字段定义: SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name = 'TABLE_NAME';
调整字段长度: ALTER TABLE table_name MODIFY (column_name VARCHAR2(新长度));
3.2 序列生成异常
错误信息: ORA-08004: sequence SEQ_XXX.NEXTVAL exceeds internal limits
问题原因:
- 序列达到最大值
- 序列缓存设置不合理
- 并发获取序列值
解决方案:
检查序列状态: SELECT sequence_name, min_value, max_value, increment_by, cache_size FROM user_sequences WHERE sequence_name = 'SEQ_NAME';
重建序列: DROP SEQUENCE sequence_name; CREATE SEQUENCE sequence_name START WITH xxx INCREMENT BY 1 NOCACHE;
3.3 表空间不足
错误信息: ORA-01653: unable to extend table xxx by xxx in tablespace xxx
问题原因:
- 表空间物理空间不足
- 表空间最大尺寸限制
- 数据文件无法自动扩展
解决方案:
检查表空间使用情况: SELECT tablespace_name, bytes/1024/1024 MB, maxbytes/1024/1024 MAX_MB FROM dba_data_files;
联系运维处理:
- 新增数据文件
- 调整自动扩展配置
- 清理无用数据
3.4 并发写入冲突
错误信息: ORA-00060: deadlock detected while waiting for resource
问题原因:
- 事务相互等待
- 索引竞争
- 锁等待超时
- 并发写入同一数据
解决方案:
查看锁状态: SELECT sid, serial#, blocking_session FROM v$session WHERE blocking_session IS NOT NULL;
优化并发策略:
- 调整事务大小
- 优化锁等待时间
- 减少长事务
4. SQLServer目的地问题
4.1 主键重复异常
错误信息: Violation of PRIMARY KEY constraint 'PK_xxx'. Cannot insert duplicate key
问题原因:
- 源数据主键重复
- 同步策略配置问题
- 标识列(IDENTITY)设置问题
解决方案:
检查主键值: SELECT column_name, COUNT() FROM table_name GROUP BY column_name HAVING COUNT() > 1;
调整同步策略:
- 设置正确的更新规则
- 处理重复数据逻辑
- 检查IDENTITY设置
三、任务执行问题
1. 任务创建问题
1.1 任务创建超时
错误信息: 创建任务时报504 time out超时错误
问题原因:
- Nginx默认超时时间设置过短
- 任务创建过程耗时较长
- 网络连接不稳定
解决方案:
修改Nginx配置: location /private-datapipeline { proxy_read_timeout 3600s; proxy_connect_timeout 3600s; proxy_send_timeout 3600s; }
执行以下步骤:
进入容器: docker exec -it $(docker ps |grep community|awk '{print $1}') bash
进入Nginx配置目录: cd /usr/local/nginx/conf/conf.d
修改配置文件: sed -ri '/private-datapipeline;/a\ \ \ \ \ \ \ \ proxy_read_timeout 3600s;' private.conf
检查配置是否生效: grep -C 5 'private-datapipeline;' private.conf
重载Nginx配置: /usr/local/nginx/sbin/nginx -s reload
1.2 文件上传失败
错误信息: 发布同步任务失败,上传jar包失败
问题原因:
- Flink与集成中心的通信异常
- 网络连接不稳定
- 文件权限问题
解决方案:
- 检查网络连接:
- 确保Flink和集成中心之间网络通畅
- 检查防火墙配置
- 验证端口是否开放
- 检查文件权限:
- 确保上传目录具有正确的写入权限
- 检查磁盘空间是否充足
1.3 消息大小超限
错误信息: io.grpc.StatusRuntimeException: RESOURCE_EXHAUSTED: Sending message exceeds the maximum configured message size
问题原因:
- 一次性同步的数据量过大
- 同步的表字段数过多
- gRPC消息大小限制配置过小
解决方案:
- 优化同步策略:
- 减少单次操作的记录数量
- 减少同步的字段数量
- 考虑分批同步数据
- 建议操作:
- 选择必要的字段进行同步
- 适当调整同步批次大小
- 避免全表数据一次性同步
2. 任务运行问题
2.1 Checkpoint异常
错误信息: Exceeded checkpoint tolerable failure threshold. The latest checkpoint failed due to Asynchronous task checkpoint failed.
问题原因:
- Checkpoint的大小超出限制
- Checkpoint的时间过长
- 任务状态过大
解决方案:
重启任务,尝试清理历史状态
检查数据量是否过大:
- 考虑增量同步替代全量同步
- 适当调整同步频率
- 检查是否存在数据倾斜:
- 审查数据分布情况
- 考虑优化数据分片策略
2.2 Task取消超时
错误信息: did not react to cancelling signal - interrupting; it is stuck for XXX seconds in method
问题原因:
- Task在取消过程中被阻塞
- 未能在指定时间内响应取消信号
- 可能由于逻辑问题或资源争用导致
解决方案:
- 检查task执行状态:
- 查看task manager日志
- 检查资源使用情况
- 分析task执行耗时
- 必要时强制终止:
- 记录当前任务状态
- 使用kill命令强制终止
- 重新提交任务
2.3 Schema获取失败
错误信息: Retrieve schema history failed, the schema record for engine has been removed
问题原因:
- 数据库表在任务运行时发生结构性变更
- Schema历史记录丢失
- 权限不足无法读取schema信息
解决方案:
- Schema变更管理:
- 避免在同步过程中修改表结构
- 必要变更时先停止同步任务
- 任务操作建议:
- 记录现有配置
- 重新创建同步任务
- 验证新任务配置
2.4 SourceCoordinator超时
错误信息: Failed to close the SourceCoordinator before timeout of 60000 ms
问题原因:
- 数据源连接数限制
- 网络延迟过高
- 资源争用导致响应缓慢
解决方案:
- 数据库连接管理:
- 创建专用同步账户
- 合理设置连接池大小
- 定期清理空闲连接
四、故障处理建议
1. 前置检查
1.1 数据源配置检查
检查要点:
- 数据库配置:
- 确认数据库版本是否符合要求
- 验证数据库用户权限是否完整
- 检查所需功能是否开启(如binlog、CDC等)
- 连接参数:
- 检查连接地址和端口是否正确
- 确认账号密码是否正确
- 验证连接参数格式是否规范
- 数据库状态:
- 检查数据库运行状态
- 确认数据库负载情况
- 验证数据库连接数是否充足
- ......
1.2 权限完整性检查
检查要点:
- MySQL权限要求:
- SELECT权限(读取数据)
- REPLICATION CLIENT(读取binlog)
- REPLICATION SLAVE(订阅binlog)
- SHOW DATABASES(库表结构)
- Oracle权限要求:
- SELECT ANY TABLE
- EXECUTE_CATALOG_ROLE
- SELECT ANY TRANSACTION
- LOGMINING
- SQLServer权限要求:
- db_owner角色
- CDC相关权限
- 数据库级别的读写权限
1.3 网络连通性检查
检查要点:
- 网络环境:
- 确认防火墙配置
- 检查端口开放情况
- 验证网络延迟情况
- 连通性测试:
- telnet测试端口连通性
- ping测试网络可达性
- 使用客户端工具测试连接
- 网络稳定性:
- 检查网络波动情况
- 验证带宽是否足够
- 确认是否存在网络丢包
2. 故障定位建议
2.1 日志检查要点
关键信息:
- 错误日志:
- 记录错误发生时间
- 保存完整错误信息
- 截取关键错误堆栈
- 运行日志:
- 检查任务启动日志
- 查看运行状态变更
- 关注异常中断记录
- 系统日志:
- 查看系统资源使用情况
- 检查系统异常信息
- 记录关键时间点日志
2.2 常见问题排查
排查步骤:
- 连接问题:
- 验证数据源是否可访问
- 检查认证信息是否正确
- 确认网络环境是否稳定
- 同步异常:
- 检查源表结构是否变更
- 验证数据一致性
- 查看增量数据捕获状态
- 性能问题:
- 检查资源使用情况
- 分析任务执行瓶颈
- 评估优化可能性