postgresql因在从库备份时间长而失败

文章目录

环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 7,Linux x86-64 Red Hat Enterprise Linux 8

版本:10.4,11,12,13,14

症状

在standby从库用pg_dump因数据库比较大备份时间久,抛出错误备份失败。报错信息如下

复制代码
postgres@vm112 ~]$ pg_dump -dpostgres -f a.dmp
pg_dump: error: Dumping the contents of table "t1" failed: PQgetResult() failed.
pg_dump: error: Error message from server: ERROR:  canceling statement due to conflict with recovery
DETAIL:  User query might have needed to see row versions that must be removed.

问题原因

standby从库有个wal replay进程在进行wal回放, 如果回放过程中有查询会话和回放的内容发生了冲突, 那么wal回放会进行等待,等待的时间不会大于参数max_standby_streaming_delay的设定。当等待超过这个时间时, wal replay会cancel与之有冲突的所有查询会话, 然后开始恢复。

解决方案

1、查询max_standby_streaming_delay设置

sql 复制代码
postgres=# show max_standby_streaming_delay ;
 max_standby_streaming_delay 
-----------------------------
 3min
(1 row)

2、调大max_standby_streaming_delay的设置

sql 复制代码
postgres=#  alter system set max_standby_streaming_delay='10min';
ALTER SYSTEM
postgres=# select pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)
postgres=# show max_standby_streaming_delay ;
 max_standby_streaming_delay 
-----------------------------
 10min
(1 row)

3、重新进行备份,备份成功

sql 复制代码
[postgres@vm112 ~]$  pg_dump -dpostgres -f a.dmp;
[postgres@vm112 ~]$  

报错编码

pg_dump: error: Error message from server: ERROR: canceling statement due to conflict with recovery

相关推荐
流浪0011 小时前
Linux基础篇(二)轻松掌握入门级指令
linux·运维·服务器
遇见火星1 小时前
Nginx 缓存配置:动静分离,快如闪电
运维·nginx·缓存
翔云1234561 小时前
Linux 系统进程全状态详解(内核底层+用户实操双视角)
linux·运维
phltxy1 小时前
Redis:从入门到精通的第一步
数据库·redis·缓存
飞飞传输1 小时前
服务器数据自动同步如何实现?企业级方案避免文件丢失
大数据·运维·安全
User_芊芊君子1 小时前
数据库V9R4C19安全加固:最小权限部署与不可逆哈希存储实战
数据库·安全·哈希算法
bukeyiwanshui1 小时前
20260509 Dockerfile案例
linux·运维·docker
岳来1 小时前
docker 容器重启策略RestartPolicy
运维·docker·容器·restartpolicy
IMPYLH1 小时前
Linux 的 tty 命令
linux·运维·服务器·bash