跳到主要内容
版本:Next

创建从库

最方便的创建从库的方法是使用pg_basebackup命令。pg_basebackup命令可以通过网络连接上主库,并从主库复制整个数据库群集,并根据给定的参数自动设置数据库参数。一个典型的使用如下:

$ pg_basebackup -F p -X stream -v -P -h node1 -U replica -D $PGDATA -R -C --slot node2

pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/5000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created replication slot "node2"
24312/24312 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/5000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: renaming backup_manifest.tmp to backup_manifest
pg_basebackup: base backup completed

这个过程里,pg_basebackup帮你完成了:

  • 自动创建复制槽
SELECT * FROM pg_replication_slots;

slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size

-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------

node2 | | physical | | | f | f | | | | 0/5000000 | | reserved |

(1 row)
  • 自动配置密码文件
$ cat .pgpass
node1:1921:replication:replica:123456
  • 自动设置primary_conninfo参数
primary_conninfo = 'user=replica passfile=''/home/halo/.pgpass'' channel_binding=disable host=node1 port=1921 sslmode=disable sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=halo target_session_attrs=any'
  • 自动设置primary_slot_name参数
primary_slot_name = 'node2'
  • 自动创建standby.signal标识文件

  • 自动复制数据库群集

pg_basebackup命令完成后,就可以使用pg_ctl启动从库了。在主库上,我们可以通过视图pg_stat_replication观察到从库的情况:

 SELECT * FROM pg_stat_replication;

pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag | repl

y_lag | sync_priority | sync_state | reply_time

-------+----------+---------+------------------+----------------+-----------------+-------------+-------------------------------+--------------+-----------+-----------+-----------+-----------+------------+-----------+-----------+------

------+---------------+------------+-------------------------------

21495 | 16384 | replica | walreceiver | 192.168.56.102 | node2 | 34404 | 2021-11-08 10:47:47.669771+08 | | streaming | 0/6000148 | 0/6000148 | 0/6000148 | 0/6000148 | | |

| 0 | async | 2021-11-08 10:47:56.754617+08

(1 row)