PostgreSQL12.3版本容器两台,部署参考https://www.cnblogs.com/zspwf/p/16113298.html
主库: 192.168.3.14:2200
从库: 192.168.3.14:2201
1.新建用于复制的用户
CREATE ROLE replicate WITH LOGIN PASSWORD 'xyz!345' REPLICATION ;
2.往主库的pg_hba.conf文件追加以下内容,其中192.168.3.14为从库IP,/data/nismes/bd-test/为映射容器目录,未映射请进入容器执行
METHOD参数解析
md5是常用的密码认证方式,如果你不使用ident,最好使用md5。密码是以md5形式传送给数据库,较安全,且不需建立同名的操作系统用户。
password是以明文密码传送给数据库,建议不要在生产环境中使用。
trust是只要知道数据库用户名就不需要密码或ident就能登录,建议不要在生产环境中使用。
reject是拒绝认证。
#映射执行
echo "host replication replicate 192.168.3.14/32 trust" >> /data/nismes/bd-test/pg_hba.conf
#未映射执行
docker exec -it 容器id /bin/bash
echo "host replication replicate 192.168.3.14/32 trust" >> /var/lib/postgresql/data/pg_hba.conf
3.主库开启归档模式
方式1
ALTER SYSTEM SET archive_command = ON ;
ALTER SYSTEM SET archive_command ='cp -i %p /home/%f </dev/null';
方式二:打开postgresql.conf文件,修改参数
4.主库配置完成,重启数据库
1.进入容器 ,执行命令
//将文件备份至Home目录
pg_basebackup -h 192.168.3.14 -p 2200 -U replicate -w -Fp -Xs -Pv -R -D /home
//覆盖数据目录
cp -R /home/* /var/lib/postgresql/data/
//清空home目录
rm -rf /home/*
2.设置备用服务器连接字符串
primary_conninfo
指定备用服务器用来连接发送服务器的连接字符串。这个字符串的格式在libpq-connstring中描述。 如果在这个字符串中有任何选项未被指定,那么将检查相应的环境变量(见libpq-envars)。 如果环境变量也没有被设置,则使用默认值。
连接字符串应当指定发送服务器的主机名(或地址),以及端口号(如果它和备用服务器的默认端口不同)。 还要指定对应于发送服务器上合适权限角色的用户名(见streaming-replication-authentication)。 如果发送服务器要求口令认证,还需要提供一个口令。它可以在primary_conninfo字符串中提供,或者在后备服务器(使用replication作为数据库名)的一个单独~/.pgpass文件中提供。 不要在primary_conninfo字符串中指定一个数据库名。
这个参数只能在服务器启动时被设置。如果服务器没有处于备用模式,则此设置无效。
ALTER SYSTEM SET primary_conninfo = 'user=replicate passfile=''/root/.pgpass'' host=192.168.3.14 port=2200 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any';
ALTER SYSTEM SET max_connections ='300';
3.重启从库
主库查看复制
select * from pg_stat_replication;
主库创建数据库测试
CREATE TABLE test2(fc1 varchar(50),fc2 int);
主库插入测试
INSERT INTO test2 SELECT '测试1',1
从库查看
SELECT * FROM test2
从库删除测试
DROP TABLE test2
手机扫一扫
移动阅读更方便
你可能感兴趣的文章