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-setupshell 脚本将- /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