当前位置: 首页 > news >正文

PostgreSQL 16 单虚拟机主从搭建测试(学习记录)

一、搭建环境说明

本次测试基于 PostgreSQL 16 版本,因只有一台虚拟机,故在同一台机器上创建两个实例:主库实例(main)、从库实例(test),用于学习PostgreSQL主从复制的基本搭建流程。

  • 数据库版本:PostgreSQL 16(Ubuntu 16.13-0ubuntu0.24.04.1)

  • 主库实例:main,端口 5432,数据目录 /var/lib/postgresql/16/main,配置目录 /etc/postgresql/16/main

  • 从库实例:test,端口 5433,数据目录 /var/lib/postgresql/16/test,配置目录 /etc/postgresql/16/test

  • 操作用户:postgres(PostgreSQL默认系统用户)

二、搭建步骤(完整操作记录)

2.1 创建从库test实例

使用pg_createcluster命令创建test实例,指定端口为5433(避免与主库5432端口冲突),操作及输出如下:

# 创建test实例 postgres@lzy:~$ pg_createcluster 16 test -p 5433 Creating new PostgreSQL cluster 16/test ... /usr/lib/postgresql/16/bin/initdb -D /var/lib/postgresql/16/test --auth-local peer --auth-host scram-sha-256 --no-instructions The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "en_US.UTF-8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /var/lib/postgresql/16/test ... ok creating subdirectories ... ok selecting dynamic shared memory implementation ... posix selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting default time zone ... Etc/UTC creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok Warning: systemd does not know about the new cluster yet. Operations like "service postgresql start" will not handle it. To fix, run: sudo systemctl daemon-reload Ver Cluster Port Status Owner Data directory Log file 16 test 5433 down postgres /var/lib/postgresql/16/test /var/log/postgresql/postgresql-16-test.log # 查看所有实例状态 postgres@lzy:~$ pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 16 main 5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log 16 test 5433 down postgres /var/lib/postgresql/16/test /var/log/postgresql/postgresql-16-test.log

2.2 主库(main)配置修改

修改主库的postgresql.conf和pg_hba.conf配置文件,开启WAL复制相关参数,允许从库连接。

# 修改主库postgresql.conf配置文件 vim /etc/postgresql/16/main/postgresql.conf # 在文件末尾添加以下配置(开启主从复制所需参数) listen_addresses = '*' port = 5432 wal_level = replica max_wal_senders = 10 max_replication_slots = 10 hot_standby = on wal_log_hints = on # 修改主库pg_hba.conf配置文件(设置访问权限) vim /etc/postgresql/16/main/pg_hba.conf # 在文件末尾添加以下配置,允许本地从库连接进行复制 host replication all 127.0.0.1/32 trust

2.3 重启主库使配置生效

postgres@lzy:~$ pg_ctlcluster 16 main restart Warning: the cluster will not be running as a systemd service. Consider using systemctl: sudo systemctl restart postgresql@16-main

2.4 主库创建复制专用用户

登录主库,创建具有REPLICATION权限的用户repl,用于从库拉取主库数据进行同步。

-- 登录主库(默认端口5432,可省略-p参数) psql -p 5432 -- 创建复制用户 CREATE ROLE repl REPLICATION LOGIN; ALTER ROLE repl PASSWORD '123456'; -- 退出数据库 \q

2.5 从库(test)配置

清空从库test的数据目录,使用pg_basebackup命令从主库拉取全量数据,完成从库初始化配置。

# 查看实例状态(确认test实例处于down状态) postgres@lzy:~$ pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 16 main 5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log 16 test 5433 down postgres /var/lib/postgresql/16/test /var/log/postgresql/postgresql-16-test.log # 清空从库数据目录(确保目录为空,避免数据冲突) postgres@lzy:~$ rm -rf /var/lib/postgresql/16/test/* # 从主库拉取全量备份,自动配置主从同步关系 postgres@lzy:~$ pg_basebackup \ -h 127.0.0.1 \ -p 5432 \ -U repl \ -D /var/lib/postgresql/16/test \ -Fp -Xs -P -R Password: 38524/38524 kB (100%), 1/1 tablespace # 启动从库test postgres@lzy:~$ pg_ctlcluster 16 test start Warning: the cluster will not be running as a systemd service. Consider using systemctl: sudo systemctl start postgresql@16-test # 再次查看实例状态(确认test实例处于online,recovery状态) postgres@lzy:~$ pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 16 main 5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log 16 test 5433 online,recovery postgres /var/lib/postgresql/16/test /var/log/postgresql/postgresql-16-test.log

三、主从同步验证测试

通过在主库创建表、插入数据,在从库查询数据,验证主从同步是否正常;同时确认从库处于只读恢复状态。

# 查看主库复制状态(确认从库连接) postgres@lzy:~$ psql -p 5432 -c "SELECT * FROM pg_stat_replication;" # 主库创建测试表并插入数据 postgres@lzy:~$ psql -p 5432 -c "CREATE TABLE test_sync(id int); INSERT INTO test_sync VALUES (100);" CREATE TABLE INSERT 0 1 # 从库查询测试数据(验证同步是否正常) postgres@lzy:~$ psql -p 5433 -c "SELECT * FROM test_sync;" id ----- 100 (1 row) # 查看从库状态(确认从库处于恢复模式,只读) postgres@lzy:~$ psql -p 5433 -c "SELECT pg_is_in_recovery();" pg_is_in_recovery ------------------- t (1 row)

四、学习总结

本次测试成功在单台虚拟机上完成了PostgreSQL 16的主从搭建,核心流程为:创建从库实例→配置主库复制参数→创建复制用户→从库拉取主库全量备份→启动从库→验证同步。

关键要点:主从实例端口需区分(避免冲突),主库需开启wal_level=replica等复制参数,pg_basebackup命令的-R参数可自动配置主从连接关系,从库启动后处于online,recovery状态(只读),可正常同步主库数据。

五、补充说明

操作过程中出现的systemd相关警告,可通过执行sudo systemctl daemon-reload更新systemd配置,使系统识别新创建的test实例,不影响主从同步功能。

http://www.jsqmd.com/news/664758/

相关文章:

  • Makefile隐含规则:让你少写一半代码的‘偷懒’技巧,从自动推导.o文件说起
  • Kali Linux 虚拟机安装与初始化全攻略
  • 从“文件发不出去“到全员高效协作:一家设计院文档管理变革纪实
  • 如何识别兰州服务可靠的不锈钢灰供应商?白刚玉/磨料/棕刚玉/碳化硅/铬刚玉/不锈钢灰/金刚砂,不锈钢灰厂家哪个好 - 品牌推荐师
  • GPT-SoVITS开箱即用:无需代码,快速体验5秒声音复刻
  • all-MiniLM-L6-v2开发者指南:构建个性化推荐系统的嵌入服务
  • SQL窗口函数解决多维排名问题_组合排序实战
  • 如何选择中国商标律所?2026年4月推荐评测口碑对比知名品牌维权诉讼证据链难题 - 品牌推荐
  • 如何选择减肥塑形品牌?2026年4月推荐评测口碑对比五大产品领先熬夜族调整三餐 - 品牌推荐
  • Stable Yogi 模型Visio流程图绘制:AI应用系统架构设计与部署流程可视化
  • 战略视角:Unity游戏自动翻译插件架构设计与企业级部署实践
  • 开源大模型落地零售业:Ostrakon-VL-8B像素终端部署全流程
  • 3D Face HRN模型安全考量:人脸数据隐私保护方案
  • 攻克TypeError: Cannot read properties of undefined (reading ‘NormalModule‘)的四种实战策略
  • 第29篇:AI项目实战复盘:我们如何用AI工具月增10万粉丝?(踩坑总结)
  • 李慕婉-仙逆-造相Z-Turbo模型微调实战:使用自定义数据集训练专属画风
  • CSS如何解决Bootstrap表格溢出问题_利用table-responsive容器
  • 文件版本管理:企业云盘如何做到每一次修改都有迹可循
  • GLM-4.7-Flash镜像详解:预加载59GB模型,支持4096 tokens上下文
  • STM32F407 USB Host驱动EC20模块避坑指南:从AT指令调试到数据收发的完整流程
  • 第30篇:AI辅助法律与合同审查——降低中小企业风险的成本利器(项目实战)
  • Step3-VL-10B-Base一键部署避坑指南:解决403 Forbidden等常见网络错误
  • BGE-Large-Zh模型服务化:RESTful API设计与实现
  • 杰理之有TWS情况下 连接谷歌 pixel8手机,较大概率连接不上【篇】
  • 从日志到AST再到语义缺陷图,AI根因分析全链路拆解,手把手复现奇点大会标杆案例
  • 朝棠揽阅联系方式查询:关于项目信息获取途径与购房决策的通用性参考指南 - 品牌推荐
  • 李慕婉-仙逆-造相Z-Turbo效果进阶:破解耦合过度问题实现精细化控制
  • Graphormer效果验证:使用OGB官方评估脚本验证模型预测准确率
  • nli-distilroberta-base行业方案:航空维修手册与故障现象描述逻辑推理验证
  • SeqGPT-560M实操手册:审计底稿中‘被审计单位’‘问题描述’‘整改建议’三段式抽取