3.9. 在 RHEL 10 上将 PostgreSQL 实例从之前的 RHEL 版本迁移到 PostgreSQL 16
如果您已在 RHEL 9 上运行了低于 16 的 PostgreSQL 版本,并希望将数据库软件移到运行 RHEL 10 的主机上,您可以迁移数据库。
可用的迁移方法是:
- 备份和恢复升级 - 这个方法可能需要更多的时间,但在大多数情况下可以正常工作。
-
使用
pg_upgrade
工具的快速升级 - 这个方法更快,但只有在从 PostgreSQL 13 迁移到 16 ,且硬件架构保持不变的情况下才可以正常工作。
在 PostgreSQL 迁移前,始终备份源主机上的 /var/lib/pgsql/data/
目录。
3.9.1. 使用备份和恢复方法迁移到 RHEL 10 上的 PostgreSQL 复制链接链接已复制到粘贴板!
您可以使用备份和恢复方法将数据从 PostgreSQL 的任何 RHEL 8 或 RHEL 9 版本迁移到 RHEL 10 上 PostgreSQL 的任何相等或更新版本。
先决条件
- 现有数据库服务器在 RHEL 8 或 RHEL 9 上运行,并使用从 RHEL 存储库安装的 PostgreSQL 版本。
-
两个主机上的区域设置是相同的。要验证这一点,请比较两个主机上的
echo $LANG
命令的输出。
流程
在具有您要迁移的现有 PostgreSQL 实例的主机上:
将所有数据库导出到
/var/lib/pgsql/pgdump_file.sql
文件中:su - postgres -c "pg_dumpall > /var/lib/pgsql/pgdump_file.sql"
# su - postgres -c "pg_dumpall > /var/lib/pgsql/pgdump_file.sql"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查导出的文件:
su - postgres -c 'less "/var/lib/pgsql/pgdump_file.sql"'
# su - postgres -c 'less "/var/lib/pgsql/pgdump_file.sql"'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将您在之前步骤中创建的数据库转储和 PostgreSQL 配置文件复制到 RHEL 10 主机,例如:
scp /var/lib/pgsql/pgdump_file.sql \ /var/lib/pgsql/data/pg_hba.conf \ /var/lib/pgsql/data/pg_ident.conf \ /var/lib/pgsql/data/postgresql.conf \ <user>@<rhel_10_host>:/tmp/
# scp /var/lib/pgsql/pgdump_file.sql \ /var/lib/pgsql/data/pg_hba.conf \ /var/lib/pgsql/data/pg_ident.conf \ /var/lib/pgsql/data/postgresql.conf \ <user>@<rhel_10_host>:/tmp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 RHEL 10 主机上:
安装
postgresql-server
软件包:dnf install postgresql-server
# dnf install postgresql-server
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化
/var/lib/pgsql/data/
目录:postgresql-setup --initdb
# postgresql-setup --initdb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将复制的配置文件移到
/var/lib/pgsql/data/
目录中:mv /tmp/pg_hba.conf \ /tmp/pg_ident.conf \ /tmp/postgresql.conf \ /var/lib/pgsql/data/
# mv /tmp/pg_hba.conf \ /tmp/pg_ident.conf \ /tmp/postgresql.conf \ /var/lib/pgsql/data/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保
/var/lib/pgsql/data/ directory
目录中内容的所有权正确:chown -R postgres:postgres /var/lib/pgsql/data/
# chown -R postgres:postgres /var/lib/pgsql/data/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对
/var/lib/pgsql/data/
恢复 SELinux 上下文:restorecon -Rv /var/lib/pgsql/data/
# restorecon -Rv /var/lib/pgsql/data/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用并启动
postgresql
服务:systemctl enable --now postgresql.service
# systemctl enable --now postgresql.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以
postgres
用户身份导入数据:su - postgres -c 'psql -f /tmp/pgdump_file.sql postgres'
# su - postgres -c 'psql -f /tmp/pgdump_file.sql postgres'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 验证您的数据库,并确保您的使用 PostgreSQL 服务器的应用程序可以正常工作。
如果要将 PostgreSQL 13 实例从以前的 RHEL 版本迁移到 RHEL 10 上的 PostgreSQL 16,您可以使用快速升级方法。使用此方法,您可以将 /var/lib/pgsql/data/
目录的内容复制到 RHEL 10 主机,并使用 pg_update
工具转换数据库。
此方法只有在现有的 PostgreSQL 实例版本是 13 ,且硬件架构在源和目标主机上相同时才可以正常工作。在其他情况下,请使用 备份和恢复方法。
先决条件
- 现有数据库服务器使用 PostgreSQL 13。
- 当前和未来服务器的硬件架构是相同的。
RHEL 10 主机在存放
/var/lib/pgsql/
目录的磁盘上有足够的可用空间。例如,如果要迁移的 PostgreSQL 服务器上的目录的大小为 10 GiB,则迁移过程中,RHEL 10 主机上至少需要 20 GiB 的可用磁盘空间。
-
两个主机上的区域设置是相同的。要验证这一点,请比较两个主机上的
echo $LANG
命令的输出。
流程
在具有您要迁移的现有 PostgreSQL 实例的主机上:
停止
postgresql
服务:systemctl stop postgresql.service
# systemctl stop postgresql.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进到
/var/lib/pgsql/
目录,并备份data
子目录:cd /var/lib/pgsql/ tar -zcf ~/pgdata.bak.tar.gz data/
# cd /var/lib/pgsql/ # tar -zcf ~/pgdata.bak.tar.gz data/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
~/pgdata.bak.tar.gz
存档复制到 RHEL 10 主机,例如:scp ~/pgdata.bak.tar.gz <user>@<rhel_10_host>:/tmp/
# scp ~/pgdata.bak.tar.gz <user>@<rhel_10_host>:/tmp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 RHEL 10 主机上:
安装所需的软件包:
dnf install postgresql-server postgresql-upgrade
# dnf install postgresql-server postgresql-upgrade
Copy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql-upgrade
软件包提供在一个迁移过程中所需的 PostgreSQL 13 服务器。-
如果您使用第三方 PostgreSQL 服务器模块,请针对
postgresql-devel
和postgresql-upgrade-devel
软件包构建它们,并安装它们。 确保
postgresql
服务已停止:systemctl stop postgresql.service
# systemctl stop postgresql.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入
/var/lib/pgsql/
目录,并从之前主机中提取备份的数据目录:cd /var/lib/pgsql/ tar -zxf /tmp/pgdata.bak.tar.gz
# cd /var/lib/pgsql/ # tar -zxf /tmp/pgdata.bak.tar.gz
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:删除
/tmp/pgdata.bak.tar.gz
归档:rm /tmp/pgdata.bak.tar.gz
# rm /tmp/pgdata.bak.tar.gz
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 执行升级过程:
postgresql-setup --upgrade
# postgresql-setup --upgrade
Copy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql-setup
shell 脚本将/var/lib/pgsql/data/
目录重命名为/var/lib/pgsql/data-old/
,并使用pg_upgrade
工具将数据库迁移到重新创建的/var/lib/pgsql/data/
目录中。重要pg_upgrade
工具只迁移数据库,而不迁移配置文件。迁移后,/var/lib/pgsql/data/
仅包含默认的.conf
文件。如果您之前有自定义配置文件,请从/var/lib/pgsql/data-old/
目录中复制它们,并确保它们与新的 PostgreSQL 版本兼容。启用并启动
postgresql
服务:systemctl enable --now postgresql.service
# systemctl enable --now postgresql.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清理和分析所有数据库:
su postgres -c 'vacuumdb --all --analyze-in-stages'
# su postgres -c 'vacuumdb --all --analyze-in-stages'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 验证您的数据库,并确保您的使用 PostgreSQL 服务器的应用程序可以正常工作。
可选:删除
/var/lib/pgsql/data-old/
目录,该目录包含迁移之前的数据库和配置文件。rm -r /var/lib/pgsql/data-old/
# rm -r /var/lib/pgsql/data-old/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:删除
postgresql-upgrade
软件包:dnf remove postgresql-upgrade
# dnf remove postgresql-upgrade
Copy to Clipboard Copied! Toggle word wrap Toggle overflow