covery.conf
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.231.131 port=5432 user=repuser'
[pgsql@pgstandby ~]$ touch .pgpass --在家目录下面创建.pgpass文件,目的是在连接主库的时候不需要输入密码
[pgsql@pgstandby ~]$ chmod 0600 .pgpass --注意赋予0600权限
[pgsql@pgstandby ~]$ cat .pgpass
192.168.231.132:5432:replication:repuser:hufj123
192.168.231.131:5432:replication:repuser:hufj123
不配置 .pgpass文件则警告日志显示下面信息
2019-08-05 11:37:42.556 CST [76967] FATAL: could not connect to the primary ser
ver: fe_sendauth: no password supplied
遇到错误查看日志 $PGDATA/log/路径的日志。
如果此步没报错,并且主库上可以查看到 WAL 发送进程,同时备库上可以看到 WAL 接收进程说明流复制配置成功,查看主库上的 WAL 发送进程, 如下所示:
[pgsql@pgsql ~]$ ps -ef|grep wal
pgsql 35001 34996 0 22:27 ? 00:00:00 postgres: wal writer process
pgsql 35006 34996 0 22:27 ? 00:00:00 postgres: wal sender process repuser 192.168.231.132(55152) streaming 0/7000098
pgsql 35008 34790 0 22:27 pts/1 00:00:00 grep --color=auto wal
查看备库上的 WAL 接收进程,如下所示:
[pgsql@pgstandby ~]$ ps -ef|grep wal
pgsql 59336 59310 1 22:27 ? 00:00:00 postgres: wal receiver process streaming 0/70000D0
pgsql 59347 58742 0 22:27 pts/3 00:00:00 grep --color=auto wal
接着在主库上创建一个测试表并插入数据,如下所示:
postgres=# create table test_sr(id int4);
CREATE TABLE
postgres=# insert into test_sr values(1);
INSERT 0 1
备库上验证数据是否同步:
postgres=# select * from test_sr;
id
----
1
(1 row)
2.4.2 pg_basebackup(实例级的备份) 方式部署流复制(方案二)
将备库停库,删除数据库,进行测试
[pgsql@pgstandby ~]$ pg_ctl stop
waiting for server to shut down.... done
server stopped
[pgsql@pgstandby ~]$ rm -rf /database/pg10/pg_root/*
[pgsql@pgstandby ~]$ rm -rf /database/pg10/pg_tbs/*
[pgsql@pgstandby ~]$ pg_basebackup -D /database/pg10/pg_root -Fp -Xs -v -P -h 192.168.231.131 -p 5432 -U repuser
-D 参数表示指定备节点用来接收主库数据的目标路径,这里和主库保持一致,依然是/database/pg10/pg_root目录。
-F参数指定pg_basebackup命令生成的备份数据格式,支持两种格式,p(plain)格式和t(tar)格式,p(plain)格式是指生成的备份数据和主库上的数据文件布局一样,也就是说类似于操作系统命令将数据库$PGDATA系统数据文件、表空间文件完全拷贝到备节点;t(tar)格式是指将备份文件打个tar包并存储在指定目录里,系统文件被打包成base.tar,其他表空间文件被打包成oid.tar,其中OID为表空间的OID。
-X参数设置在备份的过程中产生的WAL日志包含在备份中的方式,有两种可选方式,f(fetch)和s(stream),f(fetch)是指WAL日志在基准备份完成后被传送到备节点,这时主库上的wal_keep_segments参数需要设置得较大,以免备份过程中产生的WAL还没发送到备节点之前被主库覆盖掉,如果出现这种情况创建基准备份将会失败,f(fetch)方式下主库将会启动一个基准备份WAL发送进程;s(stream)方式中主库上除了启动一个基准备份WAL发送进程外还会额外启动一个WAL发送进程用于发送主库产生的WAL增量日志流,这种方式避免了f(fetch)方式过程中主库的WAL被覆盖掉的情况,生产环境流复制部署推荐这种方式,特别是比较繁忙的库或者是大库。
-v参数表示启用verbose模式,命令执行过程中打印出各阶段的日志,建议启用此参数,了解命令执行到哪个阶段。
-P参数显示数据文件、表空间文件近似传输百分比,由于执行pg_basebackup命令过程中主库数据文件会变化,因此这只是一个估算值;建议启用此选项,了解数据复制的进度。
[pgsql@pgstandby~]