PogtgreSQL 主从配置
安装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
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
One piece!
喜欢就支持一下吧