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

相关推荐
吴声子夜歌6 分钟前
HTML——结构化微数据语言简介
前端·数据库·html
\光辉岁月/24 分钟前
7.mybatisplus学习-条件构造器、插件、通用枚举、多数据源环境、MybatisX
数据库·oracle
承渊政道27 分钟前
云电脑连接异地MySQL:星空组网配置、端口验证与登录排障
数据库·mysql·电脑·星空组网
IT大白鼠27 分钟前
彭大帅的AI运维助手——自然语言管理 Linux 集群与网络设备——第 5 篇 · 多模态与虚拟化AI 能「看」图:多模态与虚拟化管理
linux·运维·人工智能
yexianglunbai28 分钟前
Redis 缓存详解:从原理到实战
数据库·redis·缓存
微信开发api29 分钟前
基于WTAPI构建社群运营平台:自动拉群与会话承接链路设计
java·大数据·网络·数据库·微信·自动化
天空'之城33 分钟前
单片机基础核心知识点汇总(四十六)
数据库·单片机·mongodb
冰暮流星37 分钟前
mysql之索引结构
数据库·mysql
闲云自留地38 分钟前
从结绳记事到 MySQL:数据库原理 + MySQL 基础一篇通
数据库·mysql
逃逸线LOF43 分钟前
Redis快速入门
数据库·redis·缓存