PostGreSQL主从库环境下的从节点故障恢复
已搭建的PostGreSQL11.6主从环境,因批量导入大量数据导致主从节点异常宕机,导致主节点重新启动系统,从节点wal同步信息也不完整。从节点重启pg数据库,出现下图问题:
经过分析,主从节点之间wal段缺少1天的量,很难恢复过来。所以依照以主库为基础,重置备库节点。
注意:在重置备库节点时,需要清空data下的内容,即rm -rf /opt/pgsql/data(根据自己安装时设定路径处理)。
由于主库节点上有自定义表空间,在备节点上使用pg_basebackup初始化,出现下列错误:
运行pg_basebackup -D /opt/pgsql/data -F p -X stream -v -P -h 172.22.1.XXX -p 5432 -U replica备份主节点,报“pg_basebackup: 无法创建目录 "/opt/pgsql/data/base": 文件已存在09051/19591/22300)”错误。
尝试使用在root账户下也不能成功,显然排除与权限有关。最后尝试采取在主节点下操作,具体见下面步骤:
一、主库上执行
//创建备份目录
mkdir -p /opt/pgsql/backups/`date +%Y%m%d`
//启动备份
/usr/pgsql-11/bin/psql -c "select pg_start_backup('hot_backup');"
//压缩data下文件,需排除postmaster.pid、postmaster.opts 、日志和pg_wal目录下的内容
tar -zcvPf /opt/pgsql/backups/`date +%Y%m%d`/backup.tar.gz /opt/pgsql/data/* --exclude=/opt/pgsql/data/postmaster.pid --exclude=/opt/pgsql/data/postmaster.opts --exclude=/opt/pgsql/data/log/* --exclude=/opt/pgsql/data/pg_wal/*
//停止备份
/usr/pgsql-11/bin/psql -c "select pg_stop_backup();"
//本地复制到远程备库节点上
scp /opt/pgsql/backups/`date +%Y%m%d`/* root@172.22.1.XX5:/opt/
二、备库上执行
//批量创建目录
mkdir -p /opt/pgsql/{data,backups,scripts}
//查看创建目录的情况
[postgres@pg-slave opt]$ cd pgsql
[postgres@pg-slave pgsql]$ ls -l
总用量 12
drwxrwxr-x. 2 postgres postgres 4096 2月 26 21:44 backups
drwxrwxr-x. 2 postgres postgres 4096 2月 26 21:44 data
drwxrwxr-x. 2 postgres postgres 4096 2月 26 21:44 scripts
//改变主库备份基础库压缩文件的属主
[root@pg-slave opt]# chown -R postgres:postgres backup.tar.gz
[root@pg-slave opt]# ls -l
总用量 26005368
-rw-r--r--. 1 postgres postgres 26629464375 2月 26 22:07 backup.tar.gz
drwx------. 2 root root 16384 12月 23 17:16 lost+found
drwxr-xr-x. 5 postgres postgres 4096 2月 26 21:44 pgsql
drwxr-xr-x. 2 postgres postgres 4096 2月 18 18:25 pgsqlbak
//解压备份信息
tar -zxvf /opt/backup.tar.gz -C /
//查找recovery.conf样例文件
[root@pg-slave ~]# find / -name recovery.*
/tmp/recovery.conf
/usr/pgsql-11/share/recovery.conf.sample
//复制样例文件到pg的data目录下
cp /usr/pgsql-11/share/recovery.conf.sample /opt/pgsql/data/recovery.conf
//添加备库的recovery信息
vi recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=172.22.1.XXX port=5432 user=replica password=91h^$%tU*7'
trigger_file = 'failover.now'
recovery_target_timeline = 'latest'
//编辑postgresql配置信息
vi $PGDATA/postgresql.conf
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 10s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
//启动postgresql
[postgres@pg-slave log]$ pg_ctl -D /opt/pgsql/data -l logfile start
等待服务器进程启动 .... 已停止等待
pg_ctl: 无法启动服务器进程
检查日志输出.
[postgres@pg-slave log]$ ls -l
[postgres@pg-slave log]$ vi logfile
2020-02-26 23:29:51.379 CST [23479] 致命错误: 数据目录"/opt/pgsql/data"的权限无效
2020-02-26 23:29:51.379 CST [23479] 详细信息: 权限应该为 u=rwx (0700) 或者u=rwx,g=rx (0750).
//切换到root赋予权限
chmod 0700 /opt/pgsql/data
//重新再启动,正常
[postgres@pg-slave log]$ pg_ctl -D /opt/pgsql/data -l logfile start
等待服务器进程启动 .................... 完成
服务器进程已经启动
[postgres@pg-slave log]$ ps -ef|grep postgres
postgres 23598 1 7 23:32 pts/0 00:00:01 /usr/pgsql-11/bin/postgres -D /opt/pgsql/data
postgres 23602 23598 0 23:32 ? 00:00:00 postgres: logger
postgres 23603 23598 7 23:32 ? 00:00:01 postgres: startup recovering 000000010000006500000062
postgres 23616 23598 2 23:32 ? 00:00:00 postgres: walreceiver streaming 65/62000140
postgres 23617 23598 0 23:32 ? 00:00:00 postgres: checkpointer
postgres 23618 23598 0 23:32 ? 00:00:00 postgres: background writer
postgres 23619 23598 0 23:32 ? 00:00:00 postgres: stats collector
postgres 23627 30257 0 23:32 pts/0 00:00:00 ps -ef
postgres 23628 30257 0 23:32 pts/0 00:00:00 grep --color=auto postgres
root 30255 20115 0 14:43 pts/0 00:00:00 su - postgres
postgres 30257 30255 0 14:43 pts/0 00:00:00 -bash
三、验证主备节点情况
//查看主库状态
[postgres@pg-master log]$ ps -ef | grep "wal" | grep -v "grep"
postgres 2563 2557 0 2月17 ? 00:00:21 postgres: walwriter
postgres 14874 2557 0 23:32 ? 00:00:00 postgres: walsender replica 172.22.1.XX5(46144) streaming 65/62000140
//查看从库状态
[postgres@pg-slave log]$ ps -ef | grep "wal" | grep -v "grep"
postgres 23616 23598 0 23:32 ? 00:00:00 postgres: walreceiver streaming 65/62000140
[postgres@pg-slave log]$
//数据库层面检查
//判断主备库
select pg_is_in_recovery();
# 如果返回t 说明是备库,返回f 说明是主库。
[postgres@pg-slave log]$ psql
psql (11.6)
输入 "help" 来获取帮助信息.
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 行记录)
[postgres@pg-master log]$ psql
psql (11.6)
输入 "help" 来获取帮助信息.
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 行记录)
希望通过这些分享,能给其他朋友带来一点帮助。
PostGreSQL主从库环境下的从节点故障恢复相关推荐
- 如何设定Allegro dra建库环境下的快捷键
功能菜单:LibAlias Ctrl+A 尺寸标注,层面COMP_NOTES a 尺寸标注,层面COMP_NOTES A 尺寸标注,层面COMP_NOTES Ctrl+Q 设置元件高度 Q 设置元件高 ...
- 0110-如何给Kerberos环境下的CDH集群添加Gateway节点
2019独角兽企业重金招聘Python工程师标准>>> Fayson的github: https://github.com/fayson/cdhproject 1.文档编写目的 Ga ...
- 分析解决11gR2 双节点RAC环境下的gc cr block busy/gc buffer busy acquire等待
? 系统环境 两节点的RAC:AIX6.1+Oracle 11.2.0.3.3 ? AWR里展示出来的各种症状(数据来自实例2) 虽然应用没有报障,但AWR报告里的各种迹象已经很明显了 (1) ...
- redis持久化策略梳理及主从环境下的策略调整记录
转载自 https://www.cnblogs.com/kevingrace/p/6266319.html redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来 ...
- postgresql主从备份_基于PG12.2实现主从异步流复制及主从切换教程(下)
概述 今天主要介绍如何搭建PG主从流复制及主从切换,仅供参考. PS:上篇的地址在文末链接. PostgreSQL数据库主从异步流复制搭建 环境说明: 1.安装PG数据库(主从库进行) 用脚本进行,略 ...
- centos 下 mysql 主从库搭建
作者:蘑菇 今天在本本上装了个mysql主从库配置,中间遇到了几个问题,不过经过搜寻资料,已经可以正常工作了. 过程写下来做个记录: 因为上次已经装过LNMP,所以只要再装一个mysql做从库就好了. ...
- windows下c 用mysql数据库_Windows环境下C/C++访问PostgreSQL数据库
PostgreSQL是一款在Linux环境下应用十分广泛的轻量级关系型数据库,大家都听说过MySQL,却对PostgreSQL鲜有耳闻,它其实在性能.应用领域上和MySQL不相上下.网上关于Windo ...
- CentOS下PostgreSQL 主从实现之异步流复制(Hot Standby)
Standby数据库原理 简单介绍一些基础概念与原理,首先我们做主从同步的目的就是实现db服务的高可用性,通常是一台主数据库提供读写,然后把数据同步到另一台从库,然后从库不断apply从主库接收到的数 ...
- oracle standby rac,同一环境下新建Standby RAC库
需求:在同一个环境下新建Standby RAC库,即和Primary RAC在相同的磁盘组. 说明:生产环境一般不建议这样配置DG,因为存储层面是相同磁盘组,灾备的实际意义不大.我这里是用作读写分离. ...
最新文章
- 转:Yaf 路由协议
- 对话国际农民丰收节贸易会-万祥军:雀巢全球谋定农民合作
- Visual Studio 2010 C++ 工程文件解读
- 重庆大学计算机课程设计,计算机组成原理课程设计报告重庆大学.doc
- python传文件给java_python使用简单http协议来传送文件
- 都在说实时数据架构,你了解多少?
- 27、简述redis的有哪几种持久化策略及比较?
- leetcode 88 Merge Sorted Array
- 机器学习——Day 1 数据预处理
- STAR对RNA seq进行map
- 有序表归并算法(数据结构学习笔记)
- 隐语义模型(LFM)
- DWR 实现AJAX学习
- STM32电路原理图
- 2022 年七大前沿科技:每一项都能改变世界
- List<Map,Object>>怎样取出map集合中的某一个的key值?
- 树莓4b驱动开发:Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP
- shell脚本中export命令未生效,原因详解
- 内蒙古大学计算机考研893计算机考研真题分享
- BLE:CC2540学习笔记