直接使用postgres的docker可能会出现无法字符集的问题,建议直接构建中文镜像
创建dockerfile文件
FROM postgres:11.5
RUN localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8
ENV LANG zh_CN.utf8
本同目录下执行docker build -t pgsql-cn .
echo host replication replica all md5 >> /var/lib/postgresql/data/pg_hba.conf./bin/pg_ctl -D ./data restartselect * from pg_create_physical_replication_slot('standby1_slot');主机执行sql
SELECT slot_name, slot_type, active from pg_replication_slots;
docker run -d --restart=unless-stopped -e POSTGRES_DB=test -e POSTGRES_USER=replica -e POSTGRES_PASSWORD=123456 -p 35432:5432 pgsql-cn
也可以通过pg_basebackup 备份的数据启动,这样就不能设置账号,数据库等信息了
docker exec -it 主容器id sh -c “echo host replication replica all md5 >> /var/lib/postgresql/data/pg_hba.conf”
docker exec -it -u postgres 主容器id sh -c “pg_ctl reload”
docker exec -it 主容器id psql -U replica -c “select * from pg_create_physical_replication_slot(‘standby1_slot’);”
docker run -it --rm -v 存储路径:/var/lib/postgresql/data pgsql-cn pg_basebackup -R -h 主机ip -U repilica -X stream -P -S standby1_slot -D /var/lib/postgresql/data
docker run -d --restart=unless-stopped -v 存储路径:/var/lib/postgresql/data -p 45432:5432 pgsql-cn
SELECT pg_promote(true,60);【只在pg12以上有效】docker exec -it 备容器id psql -U test -c “select * from pg_create_physical_replication_slot(‘main_slot’);”
使用pg_basebackup从备份库恢复数据到数据卷,-R参数会自动生成热备配置到postgresql.auto.conf中
docker run -it --rm --network pg-cluster-network -v /main-back:/var/lib/postgresql/data pgsql-cn pg_basebackup -R -h 备库ip -U 账号 -X stream -P -S main_slot -D /var/lib/postgresql/data