PostgreSQL 12取消了recovery.conf文件

1,211 阅读2分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
PostgreSQL 12 的一个重要变化是 recovery.conf 配置文件中的参数合并到 postgresql.conf,recovery.conf 不再使用,如下:
recovery.conf 配置文件不再支持,此文件中的参数合并到 postgresql.conf,若 recovery.conf 存在,数据库无法启动。
新增 recovery.signal 标识文件,表示数据库处于 recovery 模式。
新增加 standby.signal 标识文件,表示数据库处于 standby 模式。\

cat recovery.conf
standby_mode = 'on'
primary_conninfo = 'user=repuser passfile=''/home/postgres/.pgpass'' host=10.0.0.1 port=5432 sslmode=prefer sslcompression=1 target_session_attrs=any application_name=hg2'

要以备机模式启动服务器,需创建一个名为standby.signal在数据目录中。到达已归档的WAL结束时,服务器将进入恢复状态,并且不会停止恢复,但是将通过尝试按照primary_conninfo设置指定的方式连接到发送服务器和/或通过使用获取新的WAL段来继续尝试继续恢复restore_command。 要以目标恢复模式启动服务器,需创建一个名为recovery.signal在数据目录中。如果同时创建standby.signal和recovery.signal文件,则备机模式优先。当完全重播已归档的WAL或recovery_target达到目标WAL时,目标恢复模式结束。

trigger_file 参数更名为 promote_trigger_file。
standby_mode 参数不再支持。\

12 版本pg_basebackup 命令的 -R 参数的效果和之前不同,主要体现在:
命令执行后在$PGDATA 目录创建 standby.signal 标识文件,文件内容为空.
命令执行后在$PGDATA 目录的 postgresql.auto.conf 文件中添加 primary_conninfo 参数信息\

验证 postgresql.auto.conf 文件,如下:\

[pg12@pghost2 pg_root]$ cat $PGDATA/postgresql.auto.conf

primary_conninfo = 'user=postgres passfile=''/home/postgres/.pgpass'' host=10.0.0.1 port=5432 sslmode=prefer sslcompression=0krbsrvname=postgres target_session_attrs=any'

在 pghost2 执行 pg_basebackup 命令,如下:

[postgres@pgstandby1 pgsql-12]$ pg_basebackup -h 192.168.40.129 -p 5432 -U postgres -D /usr/pgsql-12/data  -Fp -P -Xs -R -v       
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/57000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_122588"
104335/104335 kB (100%), 1/1 tablespace                                         
pg_basebackup: write-ahead log end point: 0/570000A0
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed

验证 standby.signal 文件,如下:

[pg12@pghost2 pg_root]$ ll $PGDATA/standby.signal

果然 $PGDATA 目录下产生了 standby.signa 标识文件,同时 postgresql.auto.conf 配置文件增加了 primary_conninfo 参数信息。 之后启动备库,如下:

[pg12@pghost2 pg_root]$ pg_ctl start

并验证主备角色,流复制正常工作。
recovery.conf 不再支持。
之前版本 PostgreSQL 的流复制备库是通过在 PGDATA目录中创建recovery.conf文件来标识的,这是流复制部署的重要文件,若PGDATA 目录中创建 recovery.conf 文件来标识的,这是流复制部署的重要文件,若 PGDATA 目录下不存在此文件,数据库无法以流复制备库角色启动。
12 版本开始 recovery.conf 文件不再支持,若数据目录中存在此文件,数据库启动报错。