Postgres 11.4 pg_basebackup Permission denied

报错截图:


pg_basebackup: could not get write-ahead log end position from server: ERROR: could not open file "./.postgresql.conf.swn": Permission denied

一、环境准备:【生产环境】
1、
Master   PG host IP :172.17.16.16                  host name:hkzbxdb1
Standby PG host IP:172.17.16.18                   host name:hkzbxdb2

2、PG Cluster 理想环境是版本一致,所以主备库版本如下:

3、停止Firewalls防火墙【主备机】、初始化PG数据库【主备机】、iptables规则配置【假如你用到/主备】;
4、Master host 配置:pg_hba.conf 和postgresql.conf;创建replication role账户repl;

文件路径:/var/lib/pgsql/11/data/pg_hba.conf
配置pg_hba.conf
keepalives 参数非必须,主要是监控TCP连接状态使用;

/var/lib/pgsql/11/data/postgresql.conf 


配置流复制功能WAL归档这部分可以不用配置,当然也可以采用"流复制+WAL连续归档"的容灾方案;

这几个replication参数比较重要,可以根据自己的需求调整参数值,更多详细信息建议参考官网文档https://www.postgresql.org/docs/11/warm-standby.html:

备注:"WAL知识点参考信息,来自PG官网"

至此,环境准备完毕。

二、理论准备
       启动流复制
       在Streaming Replication中,三种进程协同工作。甲walsender主服务器上的过程发送WAL数据到备用服务器; 然后,备用服务器上的walreceiver和启动进程接收并重放这些数据。walsender和walreceiver使用单个TCP连接进行通信。
       流复制的启动顺序图:

(1)启动主服务器和备用服务器。
(2)备用服务器启动启动过程。
(3)备用服务器启动walreceiver进程。
(4)walreceiver向主服务器发送连接请求。如果主服务器未运行,则walreceiver会定期发送这些请求。
(5)当主服务器收到连接请求时,它启动walsender进程并在walsender和walreceiver之间建立TCP连接。
(6)walreceiver发送备用数据库集群的最新LSN。一般而言,这一阶段被称为信息技术领域的握手。
(7)如果备用的最新LSN小于主要的最新LSN(备用的LSN <主要的LSN),则walsender将WAL数据从前LSN发送到后一个LSN。这样的WAL数据由存储在主要的pg_xlog子目录(版本10或更高版本,pg_wal子目录)中的WAL段提供。然后,备用服务器重放接收的WAL数据。在此阶段,备用数据库赶上主数据库,因此称为追赶。
(8)流复制开始起作用。
每个walsender进程保持适合连接的walreceiver或任何应用程序的工作阶段的状态(请注意,它不是连接到walsender的walreceiver或应用程序的状态。)以下是它的可能状态:

启动 - 从启动walsender到握手结束。见图。(5) - (6)。
追赶 - 在追赶阶段。见图(7)。
流 - 虽然流复制正在运行。见图(8)。
backup - 在为pg_basebackup实用程序等备份工具发送整个数据库集群的文件期间。
该pg_stat_replication视图显示所有正在运行的walsenders的状态。一个例子如下所示:  

三、"ERROR:  could not open file "./.postgresql.conf.swn": Permission denied",解决思路;
    1、根据报错提示查找文件及路径;
          # locate .postgresql.conf.swn
                /var/lib/pgsql/11/data/.postgresql.conf.swn
    2、根据搜索结果,查看/var/lib/pgsql/11/data/l路径下的所有文件【含隐藏】及权限;
          # ls -la /var/lib/pgsql/11/data/
                正确的权限如下截图,可以对比看,如果不匹配修改对应红色框内的权限

    3、权限修改命令
            # chmod -R 700           /var/lib/pgsql/11/data                             变更data及子目录文件权限为RWX
             # chgrp   -R postgres   /var/lib/pgsql/11/data                             变更data及子目录文件所属组为postgres
             # chown  -R postgres  /var/lib/pgsql/11/data                              变更data及子目录文件所有者为postgres
 4、以上是针对MAster Host修改;需要注意的是修改完毕之后记得重启PG服务器或系统;
 5、在Standby Host主机上登录postgres账户,然后执行pg_basebackup命令从主库异步复制PG数据资料;
             #su - postgres                                                                         从ROOT或其他账户切换到postgres账户
             # pg_basebackup -D $PGDATA -Fp -Xs -v -P -h 172.17.16.16 -p 5432 -U repl
             "备注:A.至此,正常的情况是,你可以在/var/lib/pgsql/11目录下看到data文件变大,且data下的文件和主库保持一致;
                         B.如果,你在执行pg_basebackup 命令后,提示:“/var/lib/pgsql/11/data”存在且不为空,那么你需要执行C,然后重新执行pg_basebackup命令.
                         C.执行,备份原data并新建data,Command:
                                    #mv /var/lib/pgsql/11/data /var/lib/pgsql/11/data_back
                                    #mkdir /var/lib/pgsql/11/data
                                    "

    6、备库重启PG服务,然后对比主从库信息会发现此时两边数据库信息是一致的,"问题解决".


原文地址:https://blog.51cto.com/13637805/2428007

时间: 2024-10-05 23:25:25

Postgres 11.4 pg_basebackup Permission denied的相关文章

git连接报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)

在Linux上已经安装过git了,本机(windows)想连接,通过git bash敲了下clone命令提示没权限: $ git clone git@111.11.111.11:code.git Cloning into 'code'... The authenticity of host '111.11.111.11 (111.11.111.11)' can't be established. ECDSA key fingerprint is SHA256:7jmL7Nrr9zJ7psJd3Z

Win下Eclipse提交Hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied: user=D

描述:在Windows下使用Eclipse进行Hadoop的程序编写,然后Run on hadoop 后,出现如下错误: 11/10/28 16:05:53 INFO mapred.JobClient: Running job: job_201110281103_000311/10/28 16:05:54 INFO mapred.JobClient: map 0% reduce 0%11/10/28 16:06:05 INFO mapred.JobClient: Task Id : attemp

http启动时提示如下错误Permission denied

apache配置了多端口,启动时提示如下错误,原因是selinux开启导致 [[email protected] conf]# /etc/init.d/httpd start Starting httpd: [Tue Dec 20 11:34:44 2016] [warn] NameVirtualHost *:80 has no VirtualHosts (13)Permission denied: make_sock: could not bind to address [::]:8001 (

WindowManager$BadTokenException: Unable to add window permission denied for this window type

10-11 11:47:27.472: E/AndroidRuntime(12804): java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.zhl.classguiding/cn.zhl.classguiding.XueanPdfActivity}: android.view.WindowManager$BadTokenException: Unable to add window [email prote

运行sqlplus时遇到cannot restore segment prot after reloc: Permission denied

运行sqlplus时遇到cannot restore segment prot after reloc: Permission denied,网上说可以吧SELinux关掉,但是我看了下我的系统已经关掉了,具体是编辑/etc/sysconfig/selinux,把SELINUX=enforcing一行注释掉,然后新加入一行:SELINUX=disabled,但是我这样做了以后,问题依旧,后来高手告诉我执行如下命令就行:chcon -t texrel_shlib_t /opt/app/oracle

TNS-12555 TNS:permission denied

[[email protected] ~]$ lsnrctl start listenerLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 15-OCT-2014 22:53:27Copyright (c) 1991, 2011, Oracle.  All rights reserved.Starting /u01/oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...TNSLSNR

Hadoop on Mac with IntelliJ IDEA - 2 解决URI错误导致Permission denied

本文讲述在IntelliJ IDEA中使用FileSystem.copyFromLocalFile操作Hadoop时因URI格式有误导致Permission denied的解决过程. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1 Hadoop放在虚拟机中,宿主机通过SSH连接,IDE和数据文件在宿主机. 操作代码如下 1 public class CopyFromLocalTestDriver { 2 public static v

SSH登陆阿里云服务器出现Permission denied (publickey)错误解决方案

操作环境: 操作系统:Mac10.11.5 阿里云服务器:Ubuntu16.04 远程连接:SSH 注:首先我们已假设你已经自己生成了SSH秘钥,并已经配置到阿里云.绑定了自己的云服务器. 但是后来发现原本好使的SSH再次登陆服务器时却提示:Permission denied (publickey).的错误.解决办法是用 ssh-add privateKey ssh-add 永久将私钥添加到 Keychain 我们配置完SSH之后执行 ssh-add privateKey 将 SSH 的私钥添加

httpd 启动报错“”Permission denied: make_sock: could not bind to address [::]:80“”

今天闲来无事复习一下普通用户httpd源码的安装,安装过程不赘述,在启动过程中提示错误 [[email protected] bin]$ ./httpd -k start httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.56.115 for ServerName (13)Permission denied: make_sock: could not bind t