安装PG15

yum install -y epel-release
yum install -y https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum -qy remove postgresql*
yum install -y postgresql15 postgresql15-server

初始化数据库

/usr/pgsql-15/bin/postgresql-15-setup initdb

修改配置文件(主数据库)

/var/lib/pgsql/15/data/postgresql.conf

listen_addresses = '*'
timezone = 'Asia/Shanghai'
log_timezone = 'Asia/Shanghai'
# 以下是开启主从配置
wal_level = replica     # 启用 WAL 日志记录以支持复制
max_wal_senders = 5     # 最大 WAL 发送器数
wal_keep_size = 64    # 保留 WAL 的最小大小
archive_mode = on       # 启用归档模式
archive_command = 'cp %p /var/lib/pgsql/15/archive/%f'  # 定义归档命令

/var/lib/pgsql/15/data/pg_hba.conf

host    all             all             0.0.0.0/0               md5
# 允许从数据库访问
host    replication     all             从数据库IP/32       md5

创建归档目录(主数据库)

如果启用了归档模式,则需创建归档目录

mkdir /var/lib/pgsql/15/archive
chown postgres:postgres /var/lib/pgsql/15/archive
chmod 700 /var/lib/pgsql/15/archive

开放防火墙

firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --reload

启动服务

systemctl enable postgresql-15
systemctl start postgresql-15

创建复制用户(主数据库)

sudo -i -u postgres psql
CREATE ROLE replica WITH REPLICATION LOGIN PASSWORD 'replica_password';
# 然后重启数据库
systemctl restart postgresql-15

创建用户和数据库 (主数据库)

# 切换到 PostgreSQL 用户
sudo -i -u postgres
# 创建数据库
createdb smxx
# 进入psql
psql
-- 创建用户 smxx 并设置密码
CREATE USER smxx WITH PASSWORD 'mypassword';

-- 切换到 smxx 数据库
\c smxx;

-- 将数据库的所有权限授予用户 smxx
GRANT ALL PRIVILEGES ON DATABASE smxx TO smxx;

-- 授予 schema 的所有权限
GRANT ALL PRIVILEGES ON SCHEMA public TO smxx;

-- 确保 smxx 用户可以在 schema 中创建对象
GRANT CREATE, USAGE ON SCHEMA public TO smxx;

-- 授予当前数据库中所有现有表的所有权限
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO smxx;

-- 如果需要操作序列和函数,也可以授予权限
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO smxx;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO smxx;

-- 默认授予 smxx 对所有未来表的权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO smxx;

-- 默认授予 smxx 对所有未来序列的权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO smxx;

-- 默认授予 smxx 对所有未来函数的权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON FUNCTIONS TO smxx;

从数据库配置(从数据库)

# 停止从数据库服务
systemctl stop postgresql-15

# 清空从数据库数据目录
sudo rm -rf /var/lib/pgsql/15/data/*

# 使用 pg_basebackup 从主数据库同步数据
sudo -i -u postgres
pg_basebackup -h 主数据库IP -D /var/lib/pgsql/15/data -U replica -P -X stream
# 根据提示输入 replica_password

# 创建 recovery.conf 文件
sudo -u postgres touch /var/lib/pgsql/15/data/standby.signal
sudo vi /var/lib/pgsql/15/data/postgresql.auto.conf
# 写入如下内容
primary_conninfo = 'host=主数据库IP port=5432 user=replica password=replica_password'

# 配置postgresql.conf
hot_standby = on

# 设置权限和重启 PostgreSQL
sudo chown -R postgres:postgres /var/lib/pgsql/15/data
sudo systemctl start postgresql-15

验证主从同步

# 检查主服务器日志
sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"
# 查到一条数据说明有从数据库在连接中

# 检查从服务器状态
sudo -u postgres psql -c "SELECT pg_is_in_recovery();"
# 返回结果为 t 表示从服务器处于恢复模式。

从数据库升级成主库

# 停止数据库
systemcrl stop postgresql-15

# 配置postgresql.conf
hot_standby = off

# 删除标识为热备模式的文件
rm -rf /var/lib/pgsql/15/data/standby.signal

# 删掉primary_conninfo
rm -rf /var/lib/pgsql/15/data/postgresql.auto.conf

# 启动数据库
systemctl start postgresql-15
文章作者: Captain
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 One piece
教程
喜欢就支持一下吧