现场工程师日记-MSYS2迅速部署PostgreSQL主从备份数据库

文章目录

    • 一、概要
    • 二、整体架构流程
      • 1. 安装 MSYS2 环境
      • 2. 安装postgresql
    • 三、技术名词解释
      • 1.MSYS2
      • 2.postgresql
    • 四、技术细节
      • 1. 创建主数据库
      • 2.添加从数据库复制权限
      • 3. 按需修改参数
        • (1)WAL保留空间
        • (2)监听地址
      • 4. 启动主服务器
      • 5. 复制主节点到从节点
      • 6. 启动从节点
    • 五、小结与测试

一、概要

目前对于小型的高可用应用,用一主一从两个PostgreSQL实例,基于默认的WAL replica 是最简单的方式。本次,我们主库位于192.168.101.79,从库位于192.168.101.80,全部使用msys2 ucrt64 postgresql。

二、整体架构流程

1. 安装 MSYS2 环境

在Windows下安装和配置MSYS2环境可以按照以下骤进行:

  1. 下载MSYS2安装程序:访问MSYS2官方网站(https://www.msys2.org/)下载最新的MSYS2安装程序。也可以直接去清华,中科大下载,更快。

  2. 运行安装程序:双击下载的安装程序,按照提示选择安装路径和其他选项。建议选择默认选项进行安装。

  3. 替换源:MSYS2替换国内源,清华,中科大

2. 安装postgresql

启动 ucrt64

#更新数据包
$ pacman -Syu --overwrite=* --overwrite=*.*  --noconfirm -d
#安装postgresql
$ pacman -S ucrt64/mingw-w64-ucrt-x86_64-postgresql

三、技术名词解释

1.MSYS2

MSYS2 是一个为Windows操作系统提供类Unix环境的软件包管理器和工具集。它的目标是为开发人员提供一个在Windows上进行软件开发的便捷环境。MSYS2环境包括以下主要组件:

  • MinGW系列环境:一个用于Windows的开发工具集,包括GCC编译器和一系列常用的开发库,可以用于编译和构建各种开源软件。
  • Pacman:一个类似于Linux的软件包管理器,可以方便地安装、更新和卸载软件包。
  • MSYS2 Shell:一个基于Bash的命令行终端,提供了一系列常用的Unix命令和工具,使开发人员可以在Windows上进行类Unix环境下的操作。
  • MSYS2 Runtime:提供了一些必要的运行时库和工具,使得在MSYS2环境下编译的程序可以在Windows上正常运行。

通过安装MSYS2环境,开发人员可以在Windows上使用类Unix环境下的工具和命令,方便地进行软件开发和调试。同时,MSYS2还提供了一些常用的开发库和工具,可以帮助开发人员更高效地进行开发工作。

2.postgresql

PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),以其强大的数据完整性、灵活性、高级查询能力和支持标准SQL而闻名。它支持事务处理,拥有复杂的数据类型,如数组和JSON,还提供地理空间数据的支持。其优势包括跨平台兼容、高可用性和安全性,以及高度的可扩展性,适合大规模数据存储和高性能分析应用。

四、技术细节

1. 创建主数据库

$ psql --version
psql (PostgreSQL) 17.0$ initdb -A trust -D /d/database/master -E utf-8 --locale=C -U postgres -W
属于此数据库系统的文件宿主为用户 "Administrator".
此用户也必须为服务器进程的宿主.数据库集簇将以区域环境设置 "C" 进行初始化.
默认的文本搜索配置将被设为 "english".禁止为数据页生成校验和.输入新的超级用户密码:
再输入一遍:正在修复已存在目录 D:/database/master 的权限 ... 成功
正在创建子目录 ... 成功
正在选择动态共享内存实现 ... windows
正在选择默认最大连接数 (max_connections) ... 100
正在选择默认共享缓冲区 (shared_buffers) ... 128MB
正在选择默认时区 ... Asia/Shanghai
正在创建配置文件 ... 成功
正在运行启动脚本 ... 成功
正在执行启动脚本后续初始化 ... 成功
正在同步数据到磁盘 ... 成功成功。你现在可以用下面的命令开启数据库服务器:pg^_ctl -D D:/database/master start

2.添加从数据库复制权限

现在新版的PostgreSQL默认开启了replica, 配置非常简单。第一步,就是给另一台备份机器的IP添加权限,打开 pg_hba.conf,添加对备份机器IP的权限。

$ vim /d/database/master/pg_hba.conf# TYPE  DATABASE        USER            ADDRESS                 METHOD# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.101.80/32       trust# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
host    replication     all             192.168.101.80/32       trust

3. 按需修改参数

(1)WAL保留空间

对默认的 WAL replication,是依靠WAL文件来同步的。当从节点关机一段时间后,主节点的WAL记录可能被删除了。此时,即使重启从节点,也无法继续追赶。为了不发生这样的事情,需要提高WAL保留的天数,或者文件个数。一般超过网管巡视的周期2-3倍即可。

$ vim /d/database/master/postgresql.conf
wal_keep_size = 102400		# in megabytes; 0 disables

保留102GB的空间,这样即使从节点废了,过了1天再开机,也能赶上(主机WAL还没被清理)。注意,这个值不能设置太大,否则WAL占用空间就过大了。对应我们服务器16TB的空间,设置100GB还行。

(2)监听地址
$ vim /d/database/master/postgresql.conf
listen_addresses = '*'

4. 启动主服务器

$ pg_ctl -D D:/database/master  start
等待服务器进程启动 ....2024-11-08 19:32:49.380 CST [11544] LOG:  starting PostgreSQL 17.0 on x86_64-windows, compiled by gcc-14.2.0, 64-bit
....2024-11-08 19:32:54.108 CST [11544] LOG:  listening on IPv6 address "::", port 5432
2024-11-08 19:32:54.109 CST [11544] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2024-11-08 19:32:54.377 CST [13172] LOG:  database system was shut down at 2024-11-08 19:31:17 CST
.2024-11-08 19:32:54.635 CST [11544] LOG:  database system is ready to accept connections完成
服务器进程已经启动

5. 复制主节点到从节点

复制主节点的服务到从节点,要登入到另一台机器 192.168.101.80上。查看 pg_basebackup的用法:

$ pg_basebackup --help
pg_basebackup 在运行的PostgreSQL服务器上执行基础备份.使用方法:pg_basebackup [选项]...控制输出的选项:-D, --pgdata=DIRECTORY 接收基础备份到指定目录-F, --format=p|t       输出格式 (纯文本 (缺省值), tar压缩格式)-i, --incremental=OLDMANIFESTtake incremental backup-r, --max-rate=RATE    传输数据目录的最大传输速率(单位 kB/s, 也可以使用后缀"k""M")-R, --write-recovery-conf为复制写配置文件-t, --target=TARGET[:DETAIL]backup target (if other than client)-T, --tablespace-mapping=OLDDIR=NEWDIR将表空间由 OLDDIR 重定位到 NEWDIR--waldir=WALDIR    预写日志目录的位置-X, --wal-method=none|fetch|stream按指定的模式包含必需的WAL日志文件-z, --gzip             对tar文件进行压缩输出-Z, --compress=[{client|server}-]METHOD[:DETAIL]compress on client or server as specified-Z, --compress=none    do not compress tar output一般选项:-c, --checkpoint=fast|spreadset fast or spread (default) checkpointing-C, --create-slot      创建复制槽-l, --label=LABEL      设置备份标签-n, --no-clean         出错后不清理-N, --no-sync          不用等待变化安全的写入磁盘-P, --progress         显示进度信息-S, --slot=SLOTNAME    用于复制的槽名-v, --verbose          输出详细的消息-V, --version          输出版本信息, 然后退出--manifest-checksums=SHA{224,256,384,512}|CRC32C|NONEuse algorithm for manifest checksums--manifest-force-encodehex encode all file names in manifest--no-estimate-size do not estimate backup size in server side--no-manifest      suppress generation of backup manifest--no-slot          防止创建临时复制槽--no-verify-checksums不验证校验和--sync-method=METHODset method for syncing files to disk-?, --help             显示帮助, 然后退出联接选项:-d, --dbname=CONNSTR   连接串-h, --host=HOSTNAME    数据库服务器主机或者是socket目录-p, --port=PORT        数据库服务器端口号-s, --status-interval=INTERVAL发往服务器的状态包的时间间隔 (以秒计)-U, --username=NAME    指定连接所需的数据库用户名-w, --no-password      禁用输入密码的提示-W, --password         强制提示输入密码 (应该自动发生)Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>

执行:

$ pg_basebackup -D /d/database/follower -Fp -R -v -P -h192.168.101.79 -U postgres
pg_basebackup: 开始基础备份,等待检查点完成
pg_basebackup: 已完成检查点
pg_basebackup: 预写日志起始于时间点: 0/2000028, 基于时间轴1
pg_basebackup: 启动后台 WAL 接收进程
pg_basebackup: 已创建临时复制槽"pg_basebackup_7264"
23235/23235 kB (100%), 1/1 表空间
pg_basebackup: 预写日志结束点: 0/2000158
pg_basebackup: 等待后台进程结束流操作...
pg_basebackup: 同步数据到磁盘...
pg_basebackup: renaming backup_manifest.tmp to backup_manifest
pg_basebackup: 基础备份已完成

这里的参数-R会生成用于恢复的配置文件。

注意,如果主库里已经有很多很多东西,这一步会执行很久。此时,要确保WAL的保留大小足够大(3.1节),以至于备份了1天后,等人回来了,备份起点的WAL日志还在。

6. 启动从节点

$ pg_ctl -D D:/database/follower  start
.2024-11-08 19:41:29.418 CST [13876] LOG:  starting PostgreSQL 17.0 on x86_64-windows, compiled by gcc-14.2.0, 64-bit
2024-11-08 19:41:29.419 CST [13876] LOG:  listening on IPv6 address "::", port 5433
2024-11-08 19:41:29.420 CST [13876] LOG:  listening on IPv4 address "0.0.0.0", port 5433
2024-11-08 19:41:29.682 CST [5560] LOG:  database system was interrupted; last known up at 2024-11-08 19:37:30 CST
2024-11-08 19:41:29.832 CST [5560] LOG:  starting backup recovery with redo LSN 0/2000028, checkpoint LSN 0/20000B8, on timeline ID 1
2024-11-08 19:41:29.833 CST [5560] LOG:  entering standby mode
2024-11-08 19:41:29.840 CST [5560] LOG:  redo starts at 0/2000028
2024-11-08 19:41:29.841 CST [5560] LOG:  completed backup recovery with redo LSN 0/2000028 and end LSN 0/2000158
2024-11-08 19:41:29.841 CST [5560] LOG:  consistent recovery state reached at 0/2000158
2024-11-08 19:41:29.841 CST [13876] LOG:  database system is ready to accept read-only connections完成
服务器进程已经启动
2024-11-08 19:41:30.053 CST [13924] LOG:  started streaming WAL from primary at 0/3000000 on timeline 1

至此,两个数据库已经同步,对主库的操作会全部带到从库。

五、小结与测试

msys2 的 postgresql 又新鲜又好吃。使用有限的步骤,就完成了主从备份。要注意的是WAL的保留周期。这个配置很多网上的资料都没有讲。

实际效果可以用 dbeaver测试
dbEaver

  1. 根据官方文档介绍:如果在主节点创建数据库、表空间,从节点应该有对应的表空间的位置。

  2. dbeaver默认只显示主数据库,要看到所有数据库,要选择右键“显示所有数据库”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《应用数学和力学》

作者须知 1.《应用数学和力学》(Applied Mathematics and Mechanics)于1980年由我国著名科学家钱伟长先生在重庆交通大学创办&#xff0c;创刊时为季刊&#xff0c;翌年增为双月刊&#xff0c;1985年起扩大为月刊。期刊主要刊登力学、力学中的数学方法和与现代力学紧密相关的应…

【CSS】标准怪异盒模型

概念 CSS 盒模型本质上是一个盒子&#xff0c;盒子包裹着HTML 元素&#xff0c;盒子由四个属性组成&#xff0c;从内到外分别是&#xff1a;content 内容、padding 内填充、border 边框、外边距 margin 盒模型的分类 W3C 盒子模型(标准盒模型) IE 盒子模型(怪异盒模型) 两种…

什么是PHP,有什么特点

PHP 简介 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源脚本语言&#xff0c;特别适合 Web 开发。PHP 代码可以直接嵌入到 HTML 中&#xff0c;也可以作为独立的脚本文件运行。PHP 的设计目标是使开发者能够快速编写动态和交互式的 Web 应用程序。P…

[前端项目Overview]表单构建器vue-form-generator

GitHub - vue-generators/vue-form-generator: :clipboard: A schema-based form generator component for Vue.js vue-generator-form 是一个基于 Vue.js 的表单生成器项目&#xff0c;用于动态地生成表单。它主要用于处理复杂的动态表单需求&#xff0c;比如根据 JSON 配置自…

Android中桌面小部件framework层使用到的设计模式

在Android中&#xff0c;桌面小部件&#xff08;App Widget&#xff09;的Framework层采用了多种设计模式&#xff0c;以实现模块化、可维护性和高效的交互。 以下是Android桌面小部件Framework层中常用的设计模式及其具体应用&#xff1a; 1. 观察者模式&#xff08;Observe…

半波正弦信号的FFT变换

目录 Hello&#xff0c; 大家好&#xff0c;这一期我们谈谈半波正弦信号的FFT变化长什么样子。本文硬件使用GFARM02硬件模块[1]&#xff0c;文章最后有其淘宝链接。核心器件为STM32F103RCT6&#xff0c;为Cortex-M3核&#xff0c;采用的CMSIS版本为CMSIS_5-5.6.0。 如图1所示&…

基于SpringBoot和Vue的公司文档管理系统设计与开发(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

nvm 切换 Node.js 版本

nvm 切换 Node.js 版本 0. nvm 安装1. 查看装了哪些 Node.js 版本2. 安装 Node.js 版本安装最新稳定版本.安装个18 3. 切换 Node.js 版本4. 设置默认 Node.js 版本5. 卸载 Node.js 版本6.与项目的配合使用参考资料 0. nvm 安装 安装教程就不写了&#xff0c;直接看别人的。 脚…

深度学习:解密图像、音频和视频数据的“理解”之道20241105

&#x1f50d; 深度学习&#xff1a;解密图像、音频和视频数据的“理解”之道 深度学习已然成为人工智能领域的中流砥柱&#xff0c;它如何处理不同类型的数据&#xff08;如图像、音频、视频&#xff09;&#xff1f;如何将这些数据转换成计算机能理解和学习的“语言”&#…

Linux服务器或Linux计算机设置不记录历史命令

1.设置环境变量 打开命令终端&#xff0c;编辑.bashrc文件中&#xff0c;修改HISTSIZE和HISTFILESIZE都为0 sudo nano ~/.bashrcfor setting history length see HISTSIZE and HISTFILESIZE in bash(1) HISTSIZE0 HISTFILESIZE0 2.生效 source ~/.bashrc 3.验证 cat ./b…

数据库内核研发学习之路(六)使用共享内存

postgres共享内存 目录 1 一、创建内置函数2 二、创建共享内存的声明shmstring.h文件3 三、创建两个函数的实现4 四、在ipci文件中加载共享内存 1 一、创建内置函数 共享内存的使用&#xff0c;这里是开两个psql连接&#xff0c;一个连接调用内置函数set_string设置一个字符…

【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题

问题复现 项目上历史项目为解决漏洞扫描从Tomcat 6.0升级到了9.0版本&#xff0c;服务启动的日志显示如下警告&#xff0c;数据源是通过JNDI方式在server.xml中配置的&#xff0c;控制台上狂刷无法找到表空间的错误&#xff08;没截图&#xff09; 报错&#xff1a; 06-Nov-…

接口测试用例设计的关键步骤与技巧解析!

简介 接口测试在需求分析完成之后&#xff0c;即可设计对应的接口测试用例&#xff0c;然后根据用例进行接口测试。接口测试用例的设计也需要用到黑盒测试用例设计方法&#xff0c;和测试流程与理论章节的功能测试用例设计的方法类似&#xff0c;设计过程中还需要增加与接口特…

【数据集】【YOLO】【目标检测】树木倒塌识别数据集 9957 张,YOLO道路树木断裂识别算法实战训练教程!

一、数据集介绍 【数据集】树木倒塌识别数据集 9957 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。 数据集中包含1种分类&#xff1a;{0: fallen_tree}&#xff0c;代表倒塌或者断裂的树木。 数据集来自国内外图片网站和视频截图&#xff1b; 可用于无人机树木…

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 审题 猜测备份在www.zip中&#xff0c;输入下载文件。 知识点 反序列化 解题 查看代码 看到index.php中包含了class.php,直接看class.php中的代码 查看条件 当usernameadmin&#xff0c;password100时输出flag 构造反序列化 输入select中&#…

初识机器学习

目录 什么是机器学习&#xff1f; 机器学习的基本过程&#xff1a; 监督学习 监督学习的工作原理 监督学习的应用 监督学习的优缺点 总结 非监督学习 非监督学习的工作原理 非监督学习的应用 非监督学习的优缺点 总结 什么是机器学习&#xff1f; 机器学习&#xf…

网络层5——IPV6

目录 一、IPv6 vs IPv4 1、对IPv6主要变化 2、IPv4 vs IPv6 二、IPv6基本首部 1、版本——4位 2、通信量类——8位 3、流标号——20位 4、有效载荷长度——16位 5、下一个首部——8位 6、跳数限制——8位 7、源 、 目的地址——128位 8、扩展首部 三、IPv6地址 1…

一篇文章让你明白Go语言之切片的概念和用法

Go语言的切片&#xff08;slice&#xff09;是一个灵活且强大的数据结构。相比数组&#xff0c;切片的长度可以动态变化&#xff0c;更适合用于处理动态数据。切片是基于数组构建的抽象&#xff0c;为开发者提供了更高效的内存管理和数据操作手段。 一、切片的概念和结构 切片…

css background-image背景图片轮播

1、CSS背景样式有以下几种&#xff1a; 背景颜色&#xff08;background-color&#xff09;&#xff1a;设置元素的背景颜色。背景图片&#xff08;background-image&#xff09;&#xff1a;设置元素的背景图片。背景重复&#xff08;background-repeat&#xff09;&#xff…

第八篇: 通过使用Google BigQuery进行数据批量和自动化处理

使用Python进行Google BigQuery数据批量和自动化处理 在大数据分析的日常工作中&#xff0c;定期更新、查询和处理数据是一项必不可少的任务。Google BigQuery结合Python脚本&#xff0c;可大幅简化这一过程。本文将介绍如何通过Python自动查询和更新BigQuery中的降水量数据&a…