PostgreSQL插件pgclone 类似git版本控制方案.
前段时间看到老冯的公众号推送pgclone这玩意想搞来用一下 https://vonng.com/pg/pg-clone/
翻了下文档要求磁盘分区必须支持reflink才可以, 这就意味着ext4没法玩耍了, 必须XFS Btrfs ZFS分区格式才能玩.
前段时间看到老冯的公众号推送pgclone这玩意想搞来用一下 https://vonng.com/pg/pg-clone/
翻了下文档要求磁盘分区必须支持reflink才可以, 这就意味着ext4没法玩耍了, 必须XFS Btrfs ZFS分区格式才能玩.
apt install -y postgresql-common
/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
install -d /usr/share/postgresql-common/pgdg
curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
apt update
apt install postgresql-18
USER="replica"
PASSWORD=$(openssl rand -base64 24)
NETWOKR="0.0.0.0/0" //从库IP段
IP="1.1.1.1" #主库IP
#主库
cat>>/etc/postgresql/18/main/postgresql.conf<<EOF
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
max_replication_slots = 10
wal_keep_size = 1GB
archive_mode = off
#archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'
EOF
#archive_mode归档模式很占空间
echo "host replication $USER $NETWOKR md5" >>/etc/postgresql/18/main/pg_hba.conf
# 创建用户(幂等)
sudo -u postgres psql -tc "SELECT 1 FROM pg_roles WHERE rolname='$USER'" | grep -q 1 || \
sudo -u postgres psql -c "CREATE ROLE $USER WITH REPLICATION LOGIN PASSWORD '$PASSWORD';"
systemctl restart postgresql
echo "REPL $USER PASSWORD: $PASSWORD"
echo -e "\n\n从库快速导入备份bash shell:"
echo -e "USER=$USER\nPASSWORD=$PASSWORD"
echo "sudo -u postgres pg_basebackup -h $IP -U $USER -D /home/postgresql/18/main -P -R -X stream -v"
IP="1.1.1.1" #主库IP
#rm -rf /var/lib/postgresql/18/main/*
cat>>/etc/postgresql/18/main/postgresql.conf<<EOF
listen_addresses = '*'
#recovery_min_apply_delay='24h' #延迟24小时同步
hot_standby = on
wal_keep_size = 2GB
max_wal_senders = 10
EOF
systemctl stop postgresql
mkdir /home/postgresql
chown -R postgres:postgres /home/postgresql
chmod 700 /home/postgresql
sudo -u postgres pg_basebackup -h $IP -U $USER -D /home/postgresql/18/main -P -R -X stream -v
systemctl start postgresql
tail -n 100 /var/log/postgresql/postgresql-18-main.log
#验证主库
sudo -u postgres psql -c "SELECT client_addr,state FROM pg_stat_replication;"
#验证从库
sudo -u postgres psql -c "SELECT pg_is_in_recovery();"
/etc/postgresql/18/main/conf.d/ 目录存放配置文件可以覆盖主配置