Postgresql 主从备份

129 阅读2分钟

主库配置

1、主库修改postgresql.conf。

wal_level = replica
max_wal_senders = 10          # 最大 WAL 发送进程数,设置为从库数量 + 1
wal_keep_size = 256MB        # 保留的 WAL 日志大小,防止从库落后
max_replication_slots = 10   # 最大复制槽数量,建议与从库数量一致
archive_mode = on            # 启用归档(可选,用于 WAL 归档)
archive_command = 'cp %p /path/to/archive/%f'  # 归档命令(可选)

2、修改 pg_hba.conf: 编辑主库的 pg_hba.conf 文件,允许从库和复制用户连接

 #允许 replication_user 从任何 IP 进行复制(IP可以缩小范围)
 host replication replication_user 0.0.0.0/0 md5 
 #允许 replication_user 访问数据库(如果需要,IP可以缩小范围)
 host all replication_user 0.0.0.0/0 md5

3、创建复制角色

CREATE ROLE replication_user WITH LOGIN PASSWORD 'your_secure_password' REPLICATION;

4、重启主库

systemctl restart postgresql-13.service

从库配置

去主库拉取配置

pg_basebackup -h IP<主库IP> -U replication_user -D var/lib/postgresql/data -P --wal-method=fetch

data 目录最好先备份,然后清空。如果data 已经存在的话,可能配置拉取失败。 同时,拉取配置以后,主库的配置最好不要改动,否则有可能从库启动了,同步不下来。

配置从库的 postgresql.conf

primary_conninfo = 'host= port=5432 user=replication_user password=your_secure_password' 
primary_slot_name = 'replica_slot' # 如果使用了复制槽 
hot_standby = on # 允许从库接受只读查询 
hot_standby_feedback = on # 向主库报告从库的查询,防止冲突

确保数据库目录权限是对的

chown -R postgres:postgres var/lib/postgresql/data
chmod -R 700 var/lib/postgresql/data

创建 standby.signal

在目录 var/lib/postgresql/data 下创建,不用写任何内容。 有该文件,数据库才会以从库的模式启动。 如果没有该文件的话执行一下命令返回f。有的话返回t

SELECT * FROM pg_stat_replication;

重启从库