pgsql有多种主从复制方式,推荐的是流复制
可以参考下面的教程
pgsql编译安装:pgsql 编译安装(linux)
pgsql单机多开:pgsql 单机多开
9版本后才支持流复制,完成的支持建议用10以后的版本(现在应该都用是14,15了)
即使副库和主库连接断开一段时间,也不会影响(时间太长了不行)
演示主机如下
主库机 192.168.0.233:5432
从库机 192.168.0.165:5432
psql
CREATE USER replica replication encrypted password 'replica';
vi /var/pgsqldata/pg_hba.conf
添加下面内容
host replication replica 192.168.0.165/32 trust
如果有host all all这样的字段,记得写在这个之上
vi /var/pgsqldata/postgresql.conf
找到REPLICATION模块配置,默认状态是全部为注释状态,这里有几个参数可以调整,也可以默认不改动:
级别
wal_level = replica
systemctl restart pgsql
systemctl stop pgsql
先将当前的已有的数据做基础备份
mkdir /var/pgsqldata && cd /var/pgsqldata
pg_basebackup -F p -P -R -D /var/pgsqldata -h 192.168.0.233 -p 5432 -U replica -W
密码为上面设定的replica
如果当前目录不为空,是不能操作的,选择一个空的目录,然后在运行上面的命令,如果原来没有数据库,也可以删除原来的默认文件
chmod -R 750 /var/pgsqldata
chown -R postgres:postgres /var/pgsqldata
vi /var/pgsqldata/postgresql.conf
修改下面几个部分
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 10s # 多久向主报告一次从的状态
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
因为已经设置为从服务器了,所以重启pgsql自动进行主从同步
systemctl restart pgsql
在主库的psql,输入下面的命令,可以查看所有的连接,有说明已经正常了
select client_addr,sync_state from pg_stat_replication;
如果主从的时区不同,会报错。
可以用下面的进行检查处理
locale
找到第一个显示的地区
dpkg-reconfigure locales
然后在列表中找到主库的地区,输入数字即可