PG数据库安装

1、配置pg源

# 1. 安装前置依赖
sudo apt update
sudo apt install -y postgresql-common ca-certificates
# 2. 执行官方仓库配置脚本
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
# 3. 安装最新稳定版 PostgreSQL
sudo apt install -y postgresql postgresql-contrib
#如需安装指定版本例如17
sudo apt install -y postgresql-17 postgresql-client-17

2、设置基础配置

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '你的强密码';"
sudo vi /etc/postgresql/18/main/postgresql.conf   # 可修改运行目录以及配置优化
sudo vi /etc/postgresql/18/main/pg_hba.conf       # 添加 host 规则,比如远程访问
sudo systemctl restart postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql
# 验证数据目录
sudo -u postgres psql -c "SHOW data_directory;"

3、配置允许从库复制

vi /etc/postgresql/18/main/pg_hba.conf

# 允许从库进行复制连接
host    replication     replicator      214.27.8.215/32         scram-sha-256
# 允许从库进行基础备份(pg_basebackup)
host    all             postgres        214.27.8.215/32         scram-sha-256
#允许所有用户远程登录
host    all             all     0.0.0.0/0      scram-sha-256

4、配置复制专用账号

sudo -u postgres psql
-- 创建专用复制用户
CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'Dream001$';

-- 创建物理复制槽(防止主库过早清理 WAL)
SELECT pg_create_physical_replication_slot('replica_214_slot');

-- 查看复制槽
SELECT slot_name, slot_type, active FROM pg_replication_slots;
\q
#重启主库生效
sudo systemctl restart postgresql

5、从库安装

#安装步骤与主库步骤一致
#安装完后,先不启动执行向主库同步操作
sudo -u postgres pg_basebackup   -h 123.181.192.66   -U repl   -D /data/postgresql/17/main   -Fp -Xs -P -R    
#命令解读-U指定创建的复制用户 -h是连接主库的地址 -D是指定本地的数据目录位置,最后会交互式输入密码
#如果执行同步报错提示目录不存在,则需要执行下面初始化下从库
su - postgres -c "/usr/lib/postgresql/17/bin/initdb -D /data/postgresql/17/main -E UTF8 --locale=en_US.UTF-8"
同步成功后,最后启动从库的服务

6、查看主从同步状态

#在主库查看有几个从库再同步
SELECT * FROM pg_stat_replication;
#在从库查看
SELECT 
    now() AS check_time,
    pg_is_in_recovery() AS is_standby,
    pg_last_wal_receive_lsn() AS receive_lsn,
    pg_last_wal_replay_lsn() AS replay_lsn,
    pg_wal_lsn_diff(pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn()) AS replay_lag_bytes,
    pg_last_xact_replay_timestamp() AS last_replay_time,
    now() - pg_last_xact_replay_timestamp() AS replay_delay;

7、如果需要将从库提升为主库

将从库提升为主库
sudo -u postgres pg_ctl promote -D /data/postgresql/17/main
sudo -u postgres /usr/lib/postgresql/17/bin/pg_ctl promote -D /data/postgresql/17/main     #如果 pg_ctl 命令找不到,指定完整路径
posted @ 2026-08-14 14:09  ZANAN  阅读(7)  评论(0)    收藏  举报