数据集成同步异常解决手册
目录
一、数据源连接问题
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;