HDP 异常排查手册
一、数据源连接问题
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保留关键字作为字段名
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';
2.6 Oracle监听器服务名识别错误
错误信息: ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
问题原因:
-
连接字符串中的服务名(SERVICE_NAME)或SID不正确
-
Oracle数据库实例未运行*
-
Oracle监听器未正常启动或配置有误*
-
监听器尚未注册请求的服务*
-
TNS配置不正确*
2.7 监听器拒绝连接
错误信息: Listener refused the connection with the following error: ORA-12514, TNS:listener does not currently know of service requested in connect descriptor (CONNECTION_ID=Fy668w9sSS+ZXlTWboSNzA==)
问题原因:
-
监听器未正确配置请求的服务 名。
-
数据库实例未注册到监听器。
-
连接描述符中的服务名拼写错误或不存在。
-
监听器未启动或配置错误。
解决方案:
-
检查监听器配置: 确保
listener.ora文件中的服务名配置正确,并且与数据库实例的服务名一致。 -
检查数据库实例注册: 确认数据库实例已成功注册到监听器。可以通过以下命令检查:
SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;
- 如果实例未注册,尝试手动注册:
ALTER SYSTEM REGISTER;
- 检查连接描述符: 确保连接字符串中的服务名正确无误,并且与数据库实例的服务名一致。
2.8 Oracle增量数据不同步问题
错误信息:Flink Oracle CDC增量数据同步不完整、漏数据或完全无法捕获数据变更。
问题原因:
-
数据库级别未启用最小补充日志。
-
表级别未配置适当的补充日志。
-
启用了补充日志,但配置类型不正确(如只配置了主键日志,但需要全列日志)。
-
对象所有者(Schema)与补充日志配置的所有者不匹配。
-
CDC用户没有足够的权限查看日志内容。
-
归档日志被过早清理,导致CDC无法读取变更记录。
-
查询是否未提交事物,部分数据库客户端工具不会自动提交事物。
解决方案:
- 检查数据库级别补充日志配置:
SELECT SUPPLEMENTAL_LOG_DATA_MIN as "最小补充日志",
SUPPLEMENTAL_LOG_DATA_PK as "主键补充日志",
SUPPLEMENTAL_LOG_DATA_ALL as "全列补充日志" FROM V$DATABASE; 确保至少启 用了最小补充日志(SUPPLEMENTAL_LOG_DATA_MIN = 'YES')。如果未启用,执行: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
-
检查表级别补充日志配置:
-- 检查特定表的补充日志配置 SELECT LOG_GROUP_NAME as "日志组名称", LOG_GROUP_TYPE as "日志组类型" FROM DBA_LOG_GROUPS WHERE OWNER = '表所有者' AND TABLE_NAME = '表名'; 根据CDC同步需求,为表添加适当的补充日志: -- 为表添加主键补充日志 ALTER TABLE 表所有者.表名 ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
-- 如果表没有主键,但有唯一键 ALTER TABLE 表所有者.表名 ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
-- 如果需要捕获所有列的变更 ALTER TABLE 表所有者.表名 ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
-
检查并修正对象所有者不匹配问题:
-- 检查实际表所有者和表名的大小写 SELECT OWNER, TABLE_NAME FROM ALL_TABLES WHERE UPPER(TABLE_NAME) = UPPER('表名');
-
验证CDC用户权限:确保CDC用户有足够的权限读取补充日志:
-- 检查用户权限 SELECT * FROM SESSION_PRIVS;
-- 授予访问日志和数据字典的权限 GRANT SELECT ON SYS.V_$DATABASE TO cdc用户; GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO cdc用户; GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO cdc用户; GRANT SELECT_CATALOG_ROLE TO cdc用户;
注意事项:
-
启用全列补充日志会显著增加重做日志的大小,可能影响数据库性能。在高事务量环境中,应谨慎权衡并选择最小必要的补充日志级别。
-
补充日志配置更改不会影响已生成的归档日志。如果需要对历史数据进行CDC同步,必须在产生这些变更前就配置好补充日志。
-
在RAC环境中,确保补充日志配置对所有实例都有效。
-
注意表结构变更对CDC的影响,特别是主键或唯一键的变更可能需要同步调整补充日志配置。
2.9 存储过程使用TRUNCATE无法触发CDC同步
错误信息:错误:1292,Position:0,Sql-BEGIN sys.dbms logmnr.startlogmnr(startScn =>'1027988E04068',endscn=>'102798824067',OPTIONS=> DBMS_LOGMNR.DICT FROM_ONLIN ECATALOG+ DBMS LOGMN R.CONTINUOUS MINE+ DB MSLOGMNR.NO ROWID IN STMT):END:,OriginalSql=B EGINsys.dbms logmnr.start logmnr(startScn=>'10279880 4068',endScn=>'102798824 067',OPTIONS=> DBMS LO GMNR.DICT FROM ONLINE CATALOG+DBMS LOGMNR。 CONTINUOUS MINE+ DBMS LOGMNR.NO ROWID IN ST MT);END;,错误消息=ORA-0 1292 当前 LogMiner 会话没有特定的日志文件
问题原因:
-
TRUNCATE TABLE属于 DDL 操作,不属于标准的 DML(如DELETE)。 -
Oracle 的 LogMiner 和大部分 CDC 采集工具仅能捕获 DML 变更(
INSERT、UPDATE、DELETE),无法捕获TRUNCATE。 -
由于
TRUNCATE不会写入可供 CDC 采集的 REDO 日志,导致下游同步链路无法感知该操作。
解决方案:
-
禁止在需要 CDC 同步的表上使用
TRUNCATE TABLE操作。 -
改用
DELETE FROM table; COMMIT;语句清空表数据,确保该操作会写入 REDO 日志,CDC 能正常采集并同步 delete 事件到下游。 -
对已出现数据不一致的下游表,可手动执行清空操作后,重新全量同步一次数据,保证一致性。
2.10 归档日志未设置为全列导致同步字段为NULL
问题描述:
在 Flink Oracle CDC 同步任务中,如果 Oracle 归档日志(LogMiner)参数未设置为全列模式,而是仅保留主键或者部分字段,则下游表(如 MySQL、Kafka 等)同步时,只有主键字段有实际值,其余字段为NULL。问题原因:
-
Oracle 归档日志的 LogMiner 组件支持配置抓取的列范围,如仅主键、部分字段或全字段。
-
若归档日志未设置为全列模式,则 redo log 仅记录被配置的字段数据,未配置的字段不会写入日志。
-
Flink CDC 在解析 redo/归档日志时,只能提取日志中实际存在的字段,未写入日志的字段在下游表中表现为
NULL。 -
这种情况即使 Flink 表结构声明了所有字段,未被归档日志采集的字段依旧无法同步真实值。
解决方案:
-
确保 Oracle 归档日志(LogMiner)设置为全列(Full Column)模式,即所有需要同步的字段都被记录到日志。
-
配置全列同步后,重启 Flink CDC 任务,确保所有数据变更都能被完整采集。
-
对已经出现字段为
NULL的下游表,需在修正归档日志配置后,重新进行全量同步,以修复历史数据缺失。
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;
-
优化事务处理:
-
减少事务范围
-
统一访问顺序
-
添加适当的索引
3.5 TLS1.0协议不兼容
问题描述:
当源数据库为 SQL Server,并通过 JDBC 参数设置不使用 SSL 时,测试连接依然失败,报错信息如下:
-
ErrorCode=0, SQLState=08S01 -
日志中出现类似错误:
复制
Caused by: The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]。
问题原因:
-
SQL Server 即使未强制启用 SSL 连接,底层协议仍会自生成一个证书,对登录数据包进行加密。
-
较低版本的 SQL Server 可能默认只支持 TLS1.0 协议。
-
当前使用的 JRE(Java 运行环境)出于安全考虑,默认禁用了 TLS1.0 及以下协议。
-
因此,客户端无法与服务器协商出兼容的 TLS 协议,导致连接失败。
解决方案:
-
建议优先升级 SQL Server 端的 TLS 协议,支持 TLS1.2 或 TLS1.3。
-
推荐在 SQL Server 服务器上升级操作系统及相关补丁,并按照 微软官方文档 启用更高版本的 TLS 协议。
-
升级后重启 SQL Server 服务。
-
3.6 SQLServer字段类型datetime2同步异常
异常描述:
-
SQL Server 源表字段为
datetime2类型,数据中存在 2262 年以后的日期(如 9998 年)。 -
使用 Flink CDC、JDBC 等 Java 生态工具同步到下游(如 Kafka、MySQL、Hudi 等)时,任务报错,常见堆栈为:
复制
Caused by: java.lang.IllegalArgumentException at org.apache.flink.table.data.TimestampData.fromEpochMillis(...) ...
- 即使下游目标字段为字符串类型,也会出现该异常。
原因分析:
-
Java 和 Flink 的时间类型以 long 存储毫秒数,最大支持到 2262-04-11 23:47:16.854。
-
超过此时间的数据,Flink CDC 解析时无法转换,直接报错。
适用范围:
- 适用于所有通过 Java 生态工具同步 SQL Server
datetime2字段的场景。
建议处理:
-
源表数据建议控制在 2262 年以内,避免写入超大日期。
-
如确有需要存储更大日期,建议将该字段类型设计为字符串,且同步链路不做时间类型解析。
4. PostgreSQL相关问题
04.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;
4.4 从库没有复制连接主库的权限
错误信息: no pg_hba.conf entry for replication connection from host "192.168.1.103", user "postgres", SSL off
问题原因:
- PostgreSQL 数据库的访问控制文件
pg_hba.conf未为该主机、用户和连接类型(如 replication)配置允许访问的规则。
当外部服务(如数据同步、CDC、备份等)尝试以 replication 模式连接 PostgreSQL 时,若 pg_hba.conf 中没有相应的条目,则会被拒绝连接。
解决方案:
- 编辑 PostgreSQL 的
pg_hba.conf文件,为需要访问的主机、用户和 replication 连接类型添加一条允许规则。例如,允许192.168.1.103主机使用postgres用户进行 replication 连接:
oxygene
复制
# TYPE DATABASE USER ADDRESS METHODhost replication postgres 192.168.1.103/32 trust
如需开启 SSL,可将
SSL off部分调整为支持 SSL 的配置。
- 保存
pg_hba.conf文件后,需重载 PostgreSQL 配置生效:
bash
复制
pg_ctl reload# 或systemctl reload postgresql# 或SELECT pg_reload_conf();
- 建议:生产环境建议使用更安全的认证方式(如
md5),不要直接使用trust,并严格限制允许的 IP 范围。
4.5 权限异常:permission denied for database XXX
问题原因:
-
当前连接使用的数据库用户没有访问目标数据库的权限。
-
可能是该用户未被授权,或被限制连接特定数据库。
解决方案:
-
确认连接使用的用户名,确保该用户已被授权访问目标数据库。
-
可能需要superuser账户才行。
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 常见问题排查
排查步骤:
- 连接问题:
-
验证数据源是否可访问
-
检查认证信息是否正确
-
确认网络环境是否稳定
- 同步异常:
-
检查源表结构是否变更
-
验证数据一致性
-
查看增量数据捕获状态
- 性能问题:
-
检查资源使用情况
-
分析任务执行瓶颈
-
评估优化可能性