已搭建的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主从库环境下的从节点故障恢复相关推荐

  1. 如何设定Allegro dra建库环境下的快捷键

    功能菜单:LibAlias Ctrl+A 尺寸标注,层面COMP_NOTES a 尺寸标注,层面COMP_NOTES A 尺寸标注,层面COMP_NOTES Ctrl+Q 设置元件高度 Q 设置元件高 ...

  2. 0110-如何给Kerberos环境下的CDH集群添加Gateway节点

    2019独角兽企业重金招聘Python工程师标准>>> Fayson的github: https://github.com/fayson/cdhproject 1.文档编写目的 Ga ...

  3. 分析解决11gR2 双节点RAC环境下的gc cr block busy/gc buffer busy acquire等待

    ?  系统环境 两节点的RAC:AIX6.1+Oracle 11.2.0.3.3 ?  AWR里展示出来的各种症状(数据来自实例2) 虽然应用没有报障,但AWR报告里的各种迹象已经很明显了 (1)   ...

  4. redis持久化策略梳理及主从环境下的策略调整记录

    转载自 https://www.cnblogs.com/kevingrace/p/6266319.html redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来 ...

  5. postgresql主从备份_基于PG12.2实现主从异步流复制及主从切换教程(下)

    概述 今天主要介绍如何搭建PG主从流复制及主从切换,仅供参考. PS:上篇的地址在文末链接. PostgreSQL数据库主从异步流复制搭建 环境说明: 1.安装PG数据库(主从库进行) 用脚本进行,略 ...

  6. centos 下 mysql 主从库搭建

    作者:蘑菇 今天在本本上装了个mysql主从库配置,中间遇到了几个问题,不过经过搜寻资料,已经可以正常工作了. 过程写下来做个记录: 因为上次已经装过LNMP,所以只要再装一个mysql做从库就好了. ...

  7. windows下c 用mysql数据库_Windows环境下C/C++访问PostgreSQL数据库

    PostgreSQL是一款在Linux环境下应用十分广泛的轻量级关系型数据库,大家都听说过MySQL,却对PostgreSQL鲜有耳闻,它其实在性能.应用领域上和MySQL不相上下.网上关于Windo ...

  8. CentOS下PostgreSQL 主从实现之异步流复制(Hot Standby)

    Standby数据库原理 简单介绍一些基础概念与原理,首先我们做主从同步的目的就是实现db服务的高可用性,通常是一台主数据库提供读写,然后把数据同步到另一台从库,然后从库不断apply从主库接收到的数 ...

  9. oracle standby rac,同一环境下新建Standby RAC库

    需求:在同一个环境下新建Standby RAC库,即和Primary RAC在相同的磁盘组. 说明:生产环境一般不建议这样配置DG,因为存储层面是相同磁盘组,灾备的实际意义不大.我这里是用作读写分离. ...

最新文章

  1. 转:Yaf 路由协议
  2. 对话国际农民丰收节贸易会-万祥军:雀巢全球谋定农民合作
  3. Visual Studio 2010 C++ 工程文件解读
  4. 重庆大学计算机课程设计,计算机组成原理课程设计报告重庆大学.doc
  5. python传文件给java_python使用简单http协议来传送文件
  6. 都在说实时数据架构,你了解多少?
  7. 27、简述redis的有哪几种持久化策略及比较?
  8. leetcode 88 Merge Sorted Array
  9. 机器学习——Day 1 数据预处理
  10. STAR对RNA seq进行map
  11. 有序表归并算法(数据结构学习笔记)
  12. 隐语义模型(LFM)
  13. DWR 实现AJAX学习
  14. STM32电路原理图
  15. 2022 年七大前沿科技:每一项都能改变世界
  16. List<Map,Object>>怎样取出map集合中的某一个的key值?
  17. 树莓4b驱动开发:Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP
  18. shell脚本中export命令未生效,原因详解
  19. 内蒙古大学计算机考研893计算机考研真题分享
  20. BLE:CC2540学习笔记

热门文章

  1. java获得当月法定工作日_java获取当月的工作日
  2. linux系统英语词汇大全,Linux系统管理中基本命令和英语词汇
  3. Git、Github和GitLab的区别及与SVN的比较
  4. 知识分享-博客公众号推荐
  5. Net6.0项目发布到IIS 503
  6. 并行传输和串行传输的区别
  7. 这份职业我有多少期许
  8. 万物互联----聊聊OPC服务器KepWare
  9. c语言循环菜鸟,C语言菜鸟基础教程之for循环
  10. 高通驱动开发参考(二)