暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 pg_upgrade 在 Windows 上升级 PostgreSQL 集群

通讯员 2024-09-27
647

升级 PostgreSQL 集群是保持数据库平稳、安全地运行的一项重要任务。在每个新版本中,PostgreSQL 都会引入性能改进、安全补丁和新功能,这些都可以使您的系统受益。但是,升级可能有点棘手,尤其是在 Windows 环境中工作时,其中某些挑战(如权限、服务管理和文件处理)可能与 Linux 设置不同。在此博客中,我们将引导您完成在 Windows 中的 PostgreSQL 集群上执行升级的过程,涵盖确保一切顺利而不会导致数据丢失的关键步骤。

升级前注意事项

在继续升级之前,请花一些时间考虑以下情况。

备份您的集群

  • 创建 PostgreSQL 数据的完整备份,以避免在升级过程中出现问题时丢失任何数据。

查看 PostgreSQL 发行说明

  • 查看新版本的发行说明,了解可能影响您当前配置的重大更改、已弃用的功能和重要更新。

检查系统要求

  • 确保您的系统满足新版 PostgreSQL 所需的硬件和软件要求(磁盘空间、内存、CPU)。

评估扩展的兼容性

  • 验证第三方扩展、插件或自定义配置与新 PostgreSQL 版本的兼容性,因为有些可能需要更新或替换。

通过执行这些步骤,您将最大限度地降低风险并使升级更加顺利。

PostgreSQL 升级方法

次要版本升级

  • 这些涉及从一个次要版本迁移到另一个次要版本(例如,14.2 到 14.3)。
  • 此过程通常很简单,包括通过 Windows 安装程序下载较新版本的二进制文件,或在 Linux 上使用 apt-get update,然后重新启动 PostgreSQL 服务。
  • 无需更改数据目录,因此既快速又安全。

主要版本升级

  • 主要升级(例如,从 13.x 升级到 14.x)涉及内部结构和功能的更改,需要执行更多步骤。
  • 数据迁移是必不可少的,无论是使用 pg_upgrade 等工具还是通过转储和还原数据库。

基于复制的升级

  • 逻辑复制可用于升级,停机时间最短。
  • 您设置一个新集群,将数据从旧集群复制到新集群,然后在复制所有数据后进行切换。

每种方法都有其优点和缺点,选择取决于数据库大小、复杂性和最小化停机时间的需求等因素。

pg_upgrade概述

pg_upgrade 是一个强大的工具,旨在简化将 PostgreSQL 集群从一个主要版本升级到另一个主要版本的过程。它允许您快速迁移数据,而无需执行数据库的完整转储和还原,从而使其对于大型数据库非常高效。

在 Windows 上执行升级

在此设置中,我们将使用以下规格

  • Windows Server 2019(基础版)
  • 较旧的 PostgreSQL 版本:10
  • 较新的 PostgreSQL 版本: 16
  • 工具:pg_upgrade

设置 PostgreSQL10 集群

访问此 URL 下载 PostgreSQL 10 安装程序。下载完成后,继续安装;本博客未介绍 PostgreSQL 的安装步骤。

我使用所有默认设置安装了 PostgreSQL 10。

配置 PostgreSQL 10 集群后,从同一 URL 下载 PostgreSQL 16 安装程序。

使用默认设置安装 PostgreSQL 16。

此时,我们假设 PostgreSQL 10 和 PostgreSQL 16 集群都已在您的 Windows 计算机上启动并运行。

更新两台服务器的身份验证方法

为了简单起见,我使用此方法,因为它允许 PostgreSQL 在不需要密码的情况下连接到服务器。

导航到 PostgreSQL 10 的数据目录并打开 pg_hba.conf 文件。在此文件的底部,将 “md5” 身份验证方法替换为 “trust” 关键字。

图片.png

对 PostgreSQL 16 重复此过程,但不要用“md5”代替“md5”,而是将“scram-sha-256”关键字替换为“trust”。

图片.png

最后,保存这两个文件。

注意:请确保在成功升级后恢复此更改

重新启动/停止 PostgreSQL 服务

打开 Windows 服务管理器并重新启动 PostgreSQL 10 和 PostgreSQL 15 服务。

服务重新启动后,继续手动停止这两个服务。

使用 pg_upgrade –check 检查集群的运行状况

现在,是时候评估两个集群的兼容性了。pg_upgrade 提供了一个检查标志,允许您在开始升级之前对集群执行多项检查。这将运行各种测试,并最终指示集群的运行状况。

图片.png

升级集群

确认两个集群都正常,可以进行升级后,我们可以继续升级,而无需对 pg_upgrade 使用检查标志。

以管理员身份打开 Windows 命令提示符并执行以下命令。

注意:请确保根据您的系统替换变量。

"<PATH_TO_PG_UPGRADE_UTILITY>\pg_upgrade.exe" -b "<POSTGRES_10_PATH>\bin" -B "
<POSTGRES_15_PATH>\bin" -d "<POSTGRES_10_DATA_DIRECTORY_PATH>\10\data" -D "
<POSTGRES_15_DATA_DIRECTORY_PATH>\15\data" -p <POSTGRES_10_PORT> -P <POSTGRES_15_PORT> -U postgres
  • <POSTGRES_10_DATA_DIRECTORY_PATH> The data directory of the older PostgreSQL version (10), containing the data files to be upgraded.
  • <POSTGRES_15_DATA_DIRECTORY_PATH> The target data directory for the newer PostgreSQL version (15), where the upgraded data files will be placed
  • <PATH_TO_PG_UPGRADE_UTILITY> The location of the pg_upgrade utility executable that performs the upgrade.
  • <POSTGRES_10_PATH> The path to the binary directory of the older PostgreSQL version (10), where its executables are stored.
  • <POSTGRES_15_PATH> The path to the binary directory of the newer PostgreSQL version (15), where its executables are stored.
  • <POSTGRES_10_PORT> The port number on which the older PostgreSQL version (10) is running, used for connecting to the server.
  • <POSTGRES_15_PORT> The port number for the newer PostgreSQL version (15), used for connecting to the upgraded server.

图片.png
图片.png

立即从 Windows 服务管理器启动 PostgreSQL 16 服务!

回滚计划

在升级 PostgreSQL 集群时,制定定义明确的回滚计划至关重要,因为它可以确保在出现任何问题时可以快速恢复到以前的版本。以下是有效的回滚计划需要考虑的关键组件:

升级前备份

  • 在开始升级之前,请始终为现有 PostgreSQL 集群创建完整备份。使用 pg_baseackup 等工具确保捕获所有数据库、角色和配置。将此备份存储在安全的位置。

记录当前配置

  • 记录当前的 PostgreSQL 配置设置和环境详细信息。如果需要,本文档将帮助您将系统恢复到其原始状态。

测试 Rollback 过程

  • 如果可能,请在暂存环境中执行回滚过程的试运行。此练习将使您熟悉所涉及的步骤,并帮助识别任何潜在问题。

从备份还原

  • 如果升级过程中发生故障,您可以通过以下方式恢复备份:
    *
    停止新的 PostgreSQL 服务。
    *
    如有必要,重新安装旧的 PostgreSQL 版本。
    *
    使用 pg_restore 或从备份中恢复数据,或者将数据目录替换为备份副本。

验证数据完整性

  • 还原后,运行检查以确保所有数据都完好无损,并且数据库按预期运行。执行一致性检查并验证关键应用程序功能。

回滚通信

  • 如果发生回滚,请通知您的团队和利益相关者。提供有关升级状态的更新以及对服务可用性的任何影响。

回滚后审查

  • 回滚完成后,查看升级过程以确定出了什么问题。分析日志和性能指标以了解问题并调整升级策略以备将来尝试。

通过准备全面的回滚计划,您可以显著减少停机时间并降低与升级 PostgreSQL 集群相关的风险。这种主动的方法可确保您有一个安全网,从而可以更顺利地过渡到新版本。

升级后步骤

成功升级 PostgreSQL 集群后,必须执行几项关键的升级后任务,以确保一切正常运行并清理任何旧文件。以下是升级后的关键步骤:

验证集群运行状况

  • 通过连接到数据库并运行查询来检查新集群的状态。使用命令,如 SELECT version();确认版本并确保所有数据库都可访问。

清理旧数据目录

  • 确认升级成功后,您可以安全地删除旧数据目录。此步骤有助于释放磁盘空间并保持系统井然有序

测试功能和性能

  • 运行应用程序并执行测试,以检查所有功能是否按预期工作。
  • 监控新版本的性能,将其与以前的版本进行比较以确保改进。

监视日志中的错误

  • 请密切关注 PostgreSQL 日志文件,了解升级后可能出现的任何错误或警告。及时解决任何问题,确保数据库的稳定性。

备份新集群

  • 确认一切运行顺利后,对升级后的集群执行全新备份。此备份将用作将来更改或升级的还原点。

通过执行这些升级后步骤,您可以确保升级后的 PostgreSQL 集群以最佳方式运行,并维护干净高效的数据库环境。

通过及时了解 PostgreSQL 的最新版本,您不仅可以获得改进的功能和安全增强功能,还可以将系统定位为更好的性能和可扩展性。将升级过程视为增长的机会,并确保您的 PostgreSQL 集群保持稳健可靠。

原文作者:Semab Tariq
2024年9月26日

文章转载自通讯员,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论