通过SQL命令转储与还原升级大版本
操作场景
升级RDS for PostgreSQL引擎大版本,能让您享受到RDS for PostgreSQL新版本带来的功能、性能、安全的提升。但大版本升级可能存在向后不兼容的数据变更,可能导致现有业务运行不兼容。因此需要用户使用目标版本测试确保业务能够正常运行后,再执行大版本升级。
本章节中“源数据库”表示待升级的低版本RDS for PostgreSQL数据库,“目标数据库”表示待升级到的高版本RDS for PostgreSQL数据库。
RDS for PostgreSQL版本号说明
- RDS for PostgreSQL v10及其以上版本的版本号由major.minor组成。其中,major表示大版本号,minor表示小版本号。大版本升级是指major部分增加,比如:11.x升级到12.x。
- RDS for PostgreSQL v10之前的版本号由major.major.minor组成。其中,major.major表示大版本号,minor表示小版本号。大版本升级是指如major.major部分增加,比如:从9.5.x升级到9.6.x或者从9.x.x升级到10.x。
准备工作
- 查看待升级的云数据库 RDS for PostgreSQL实例信息。
- 在“实例管理”页面,单击待升级实例名称,进入待升级实例概览页面。
- 在“概览”页面中,可以查看到实例所属区域、可用区、虚拟私有云、子网、安全组。
- 准备弹性云服务器。
通过弹性云服务器连接云数据库RDS实例,需要创建一台弹性云服务器。
该弹性云服务器的区域、可用区、虚拟私有云、子网、安全组与待升级RDS for PostgreSQL实例相同。
- 在2中的弹性云服务器上,安装PostgreSQL客户端。
该弹性云服务器需要安装和RDS for PostgreSQL数据库服务端相同版本的数据库客户端,PostgreSQL数据库或客户端会自带pg_dump、pg_restore和psql工具。
- 通过psql连接源数据库,在每一个数据库上执行如下sql,获取已使用列表。
select extname from pg_extension;
- 根据查看的已使用列表,选择一个包含当前所有插件的目标升级版本。
RDS for PostgreSQL各版本支持的插件,参考支持的插件列表。
- 参考创建参数模板,创建一个兼容待升级实例参数的目标版本参数模板。
- 创建目标版本RDS for PostgreSQL实例。
- 创建RDS for PostgreSQL实例,请参见购买实例。
- 目标版本RDS for PostgreSQL实例所属区域、可用区、虚拟私有云、子网、安全组与源实例相同。
- 在2中的弹性云服务器上,通过psql连接目标数据库,确认目标实例连接正常。
操作步骤
以下操作均在已准备的弹性云服务器上执行。
- 使用psql连接源数据库,执行以下sql,获取数据库列表。
postgres=# \l
- 使用psql连接目标数据库,执行以下sql,确认1中的所有数据库在目标数据库中是否均存在。
postgres=# \l
- 使用pg_dump转储源数据库,并使用pg_restore恢复到目标数据库。针对每一个业务库,重复执行3~4。
- 对于除RDS for PostgreSQL 11外的其他版本,转储命令如下:
pg_dump -Fc -v --host=source_IP --port=source_port --username=my_user --dbname=my_source_db | pg_restore -v --no-owner --host=target_IP --port=target_port --username=my_user --dbname=my_target_db
- 对于RDS for PostgreSQL 11版本,转储命令如下:
pg_dump -Fc -v --host=source_IP --port=source_port -Ndbms_lob -Ndbms_output -Ndbms_random -Nsys -Nutl_raw -Npg_catalog --username=my_user --dbname=my_source_db | pg_restore -v --no-owner --host=target_IP --port=target_port --username=my_user --dbname=my_target_db
- pg_dump所使用的登录用户需要拥有访问该数据库所有对象的权限。
- pg_restore所使用的登录用户需要拥有该数据库的所有操作权限。
- 授权操作请参考grant。
- 若pg_dump命令使用-N参数,blob对象不会被导出。
- 若pg_dump命令使用-Fc参数,则导出的文件格式为二进制格式,如果需要导出sql类型的文件请使用-Fp参数。
- 对于除RDS for PostgreSQL 11外的其他版本,转储命令如下:
- 每迁移完一个数据库,就可以通过目标数据库测试相应业务,保证业务在目标数据库中运行正常。
- 请务必确保验证业务可以在目标库正常运行后,再将业务切换到目标数据库,然后删除源数据库。