PostgreSQL主从复制教程:CentOS 7一键部署流复制从库完整步骤

想在CentOS 7上给PostgreSQL搭个主从同步?这篇教程就是为你准备的。
1
安装postgresql





123
下载源码包
进入到postgresql官网下载需要版本的tar包,下载后上传到服务器。
解压源码
tar -zxvf postgresql-16.3.tar.gz
配置编译选项
// 进入目录
cd postgresql-16.3
// 进行编译
./configure --prefix=/opt/pgsql/post
编译与安装
# 编译源码
make -j$(nproc)
# 安装到指定目录
make install
2
修改主库配置

使用vim 编辑配置文件
vim /opt/pgsql/postgresql/data/postgresql.conf
在配置文件中加入以下内容
# 允许所有ip连接
listen_addresses = '*'
# 端口号
port=5432
# 设置最大连接数量
max_connections =100
# 日志级别
wal_level= replica
#保留日志大小
wal_keep_size = 1024MB
vim基本操作:
- i 进入插入模式
- esc 退出退出插入
- :wq 保存文件并退出
3
修改主库认证配置文件

使用vim 编辑配置文件
vim /opt/pgsql/postgresql/data/pg_hba.conf
在认证配置文件中加入以下内容
# 允许从库复制连接 (使用指定用户) 使用md密码验证
host replication repl_user 192.168.150.152/32 md5
# 允许所有ip通过密码连接 使用md5密码验证
host all all 0.0.0.0/0 md5
vim基本操作:
- i 进入插入模式
- esc 退出退出插入
- :wq 保存文件并退出
4
创建连接用户




12
// 切换用户
sudo -u postgres /opt/pgsql/postgresql/bin/psql
// 创建新用户
CREATE ROLE repl_user WITH REPLICATION LOGIN PASSWORD '1234!'; CREATE ROLE
// 重启服务
systemctl restart postgresql
5
配置从库





123
先停止服务,并删除数据(记得备份);
// 停止服务
systemctl stop postgresql
// 清空数据目录
sudo rm -rf /opt/pgsql/postgresql/data/
// 拉取主库数据
sudo -u postgres /opt/pgsql/postgresql/bin/pg_basebackup -h 192.168.150.151 -D /opt/pgsql/postgresql/data -U repl_user -P -R -X stream -C -S standby_slot
-h 192.168.150.151: 指定主库 IP 地址。-D /opt/pgsql/postgresql/data: 指定备份数据存放目录(从库数据目录)。-U repl_user: 使用复制用户进行连接。-P: 显示进度条。-R: 自动创建standby.signal文件和配置连接信息,使该实例可直接作为从库启动。-X stream: 在备份期间流式传输 WAL 日志。-C -S standby_slot: 在主库创建并使用名为standby_slot的逻辑复制槽。
验证配置文件
- 确保
/var/lib/postgresql/15/main/standby.signal存在(内容为空,仅作为标识)。 - 检查
postgresql.auto.conf是否包含主库连接信息:
6
验证主从








123456
主库检查复制状态
sudo -u postgres /opt/pgsql/postgresql/bin/psql
SELECT client_addr, sync_state, sent_lsn, write_lsn, flush_lsn, replay_lsn
FROM pg_stat_replication;
sync_state:async(异步)或sync(同步)。sent_lsn与replay_lsn差值表示同步延迟。
从库验证只读模式
sudo -u postgres /opt/pgsql/postgresql/bin/psql
SELECT pg_is_in_recovery(); -- 返回 `t` 表示是从库
CREATE TABLE test (id int); -- 应报错(从库不可写)
主库创建表数据
create table demo (id serial PRIMARY KEY ,data text);create table
从库查询数据
select * from demo;
0
0
0
qq空间
微博
复制链接
分享 更多相关项目
猜你喜欢
评论/提问(已发布 0 条)
0