news 2026/4/19 7:24:36

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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实例,不影响主从同步功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 7:23:31

N_m3u8DL-RE终极指南:如何高效下载加密流媒体视频?

N_m3u8DL-RE终极指南:如何高效下载加密流媒体视频? 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8…

作者头像 李华
网站建设 2026/4/19 7:13:17

幻灯片制作工具GiliSoft SlideShow Maker

链接: https://pan.baidu.com/s/1EUYCTUcMfqxqZQf_TbcMMg 提取码: dc1a GiliSoft SlideShow Maker原名字GiliSoft SlideShow Movie Creator是易于使用但功能强大的照片到视频转换器。借助SlideShow Movie Creator,您可以将您的照片与音乐和2D / 3D过渡效果结合在一…

作者头像 李华
网站建设 2026/4/19 7:04:27

Phi-3-mini-4k-instruct-gguf多场景:支持Prompt工程调试与效果迭代闭环

Phi-3-mini-4k-instruct-gguf多场景:支持Prompt工程调试与效果迭代闭环 1. 平台介绍 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本,特别适合问答、文本改写、摘要整理和简短创作等场景。这个开箱即用的解决方案已经完成…

作者头像 李华
网站建设 2026/4/19 7:00:48

CHORD-X在嵌入式视觉的应用:STM32平台数据预处理与上报

CHORD-X在嵌入式视觉的应用:STM32平台数据预处理与上报 1. 引言 想象一下,你有一个小型的嵌入式设备,比如一个基于STM32的摄像头模块,它被部署在工厂的生产线上,或者一个远程的农业监测站。这个设备需要实时“看懂”…

作者头像 李华