AWS DMS任务失败:无法访问pglogical文件问题排查求助
问题描述
AWS DMS全量加载+持续复制任务稳定运行2个月后突发故障,DMS任务报错:
Last failure message Last Error Stream Component Fatal error. Task error notification received from subtask 0, thread 0 [reptask/replicationtask.c:2880] [1020101] Error executing source loop; Stream component failed at subtask 0, component; Stream component terminated [reptask/replicationtask.c:2888] [1020101] Stop Reason FATAL_ERROR Error Level FATAL
CloudWatch日志中发现以下错误:
NativeError: 1 Message: ERROR: could not access file "pglogical": No such file or directory; Error while executing the queryERROR: relation "pglogical.replication_set" does not exist; No query has been executed with that handle
尝试在postgresql.conf中设置shared_preload_libraries = 'pglogical'后,PostgreSQL无法启动。
环境信息:
- 源库:PostgreSQL 13.4 (Ubuntu 13.4-1.pgdg18.04+1)
- 目标库:Aurora PostgreSQL 13.7
- 源库
postgresql.conf相关配置:
wal_level = logical max_wal_senders = 10 # max number of walsender processes wal_sender_timeout = 0 # in milliseconds; 0 disables max_replication_slots = 10 # max number of replication slots
排查解决方法
1. 确认pglogical扩展是否已安装
PostgreSQL启动失败大概率是因为pglogical扩展未实际安装到系统中。执行以下命令检查:
# 查看已安装的PostgreSQL扩展 psql -c "SELECT * FROM pg_extension;" # 检查系统中是否存在pglogical相关文件 find / -name "pglogical.so" 2>/dev/null
如果未找到,针对Ubuntu系统安装对应版本的pglogical扩展:
sudo apt update sudo apt install postgresql-13-pglogical
安装完成后再重启PostgreSQL服务。
2. 检查DMS源端点的pglogical配置
确认DMS源端点是否被误启用了pglogical相关设置:
- 登录AWS控制台进入DMS源端点配置页,检查
Use pglogical选项状态 - 若此前任务未使用pglogical,该选项被开启会导致DMS尝试调用pglogical函数引发报错,关闭后重启DMS任务
3. 核查源库账号的复制权限
确认DMS使用的源库账号权限是否有变更,执行以下SQL检查:
-- 查看账号的复制权限 SELECT usename, userepl FROM pg_user WHERE usename = 'dms_user'; -- 检查是否拥有pglogical相关权限(仅当需要使用pglogical时执行) SELECT * FROM pg_roles WHERE rolname = 'dms_user';
若权限不足,重新授予必要权限:
ALTER USER dms_user WITH REPLICATION; GRANT ALL ON SCHEMA pglogical TO dms_user; -- 按需执行
4. 分析PostgreSQL启动失败的具体原因
查看PostgreSQL日志文件(通常位于/var/log/postgresql/目录)定位启动失败细节:
tail -n 50 /var/log/postgresql/postgresql-13-main.log
常见触发原因:
- pglogical版本与PostgreSQL版本不兼容
shared_preload_libraries配置存在扩展冲突- pglogical相关文件的所有者不是postgres用户
5. 回退配置并排查故障触发点
先将shared_preload_libraries恢复为之前的有效配置,确保PostgreSQL正常启动,再做以下检查:
- 查看故障时间点的源库操作日志,确认是否有schema变更、扩展操作、参数修改等行为
- 检查源库复制槽状态:
SELECT * FROM pg_replication_slots;
若复制槽异常,可尝试删除并重新创建DMS对应的复制槽(操作前需确认无数据丢失风险)
6. 检查DMS任务的配置变更
确认DMS任务的迁移类型、表映射规则是否被修改,是否新增了需要pglogical支持的表或操作,导致DMS调用pglogical组件
内容的提问来源于stack exchange,提问作者Gosia
相关产品推荐
相关产品推荐

