关于PostgreSQL数据库版本从9.2.24升级到PostgreSQL11.5的方案

一、 目的

     当前设备中使用的PostgreSQL数据版本是9.2.24 。 而PostgreSQL官方最新的版本是12.2。 已经迭代了三个大版本,中间每个大版本又有若干个次版本的迭代更新。在每次的迭代过程中,都有许多的隐藏缺陷修复以及性能的提升,包括CPU、内存占用、磁盘读写、网络I/O、索引逻辑等等。为了提升设备中PostgreSQL数据库的性能和减少占用磁盘空间,现将旧版本的PostgreSQL9.2.24数据库更替为官方较稳定的PostgreSQL11.5版本。
     

二、 风险评估

     PostgreSQL数据库大版本号之间的内部存储关系发生了较大变化,因此主要的风险来自以下两个:
     (1) 在数据库升级之前,数据能否完整备份;以及数据库成功升级后,是否会有丢失现象。
     (2) 备份的旧数据能否理想的作用于新版本的数据库中。

     

三、 实施步骤

     PostgreSQL数据库的升级方式共有三种:
          pg_dumpall
          pg_update
          触发器复制

     上面三种方式各有优缺点,dump + restore方式是最为可靠,通常速度上面也稍慢; pg_update对于要求较短的停机时间是个不错选择,通常仅需几分钟时间,甚至对于一个较大数据库也是如此; 触发器复制方式,时间最短,但是过程复杂且容易出问题。三种方式,各有千秋,具体采用哪一种,取决于你的需要。如果你渴望停机时间段,而且希望有保证,那么pg_update是你的最佳选择。反之,若对数据的可靠性要求高于停机时间,相信我,dump + restore绝对是你的不二之选。因此,本方案中采用第一种升级方式,即 dump + restor。
     

     第一步,备份PostgreSQL9.2.24数据库中的旧数据。 当然,如PG11.5的数据库集簇目录和PG9.2.24不在同目录,则可在安装完成之后再备份也可;反之,则需要第一步进行备份,避免数据丢失。
     pg_dump -h 主机ip -p 端口 -U postgres 数据库名 > 文件名

     

     第二步,安装(源码编译安装,或是公司提供的rpm镜像包 )待升级的PostgreSQL版本(PostgreSQL11.5)到指定的目录。本次安装的指定目录是:/home/PostgreSQLClient。
完成安装后,该目录下有如下四个目录文件:bin、include、lib和share 。其中bin/目录下存放了终端方式的PostgreSQL客户端系列工具,如登录数据库psql、初始化数据库集簇initdb、创建数据库createdb、删除数据库dropdb等等。查看安装后的PostgreSQL数据库是否为预期:
          [root@Thor bin]# ./psql --version
          psql (PostgreSQL) 11.5

     

     第三步,初始化数据库集簇到指定的某目录位置。本次指定的安装目录是:/home/PostgreSQLServer。该目录主要用来存储PostgreSQL服务的系统库/表、用户数据库/表、索引文件、日志文件等等。修改PostgreSQLSever/目录权限,赋予postgres。
          [root@Thor MetadataServer]# chown -R postgres:postgres 集簇目录
          [root@Thor MetadataServer]# chmod –R 数据库集簇目录
现在使用initdb命令来初始化数据库集簇,如下:

su postgres -c '/home/PostgreSQLClient/bin/initdb -D /home/PostgreSQLServer'

     等待段时间(具体时间和系统硬件配置极其相关)后,终端会告知创建成功提示。
          waiting for server to start… done
          server started
     
     第四步,登录数据库,psql -p 数据库端口 -U postgres。并且查看当前数据库版本是否和预期一致。

metadata_test=# select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 11.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit
(1 row)
Time: 0.160 ms

     可以确认当前服务器版本是预期的PostgreSQL11.5。
     

     第五步,将备份文件中的数据库表等数据导入到PostgreSQL11.5中的数据库。注意,必须得现在PostgreSQL11.5上面创建一个空的待导入的数据库名。
     psql -p 端口 -U postgres -h 主机ip –f 备份文件 数据库名;

     
     第六步,重复第四步,登录数据库。分别查看其中的数据库和数据表数量,以及每个表中的记录(元组)总数是否和PostgreSQL9.2.24中的保持一致。此外数据记录(元组)的属性(字段)信息是否有差异。

四、 结果

     升级过后的11.5数据库中数据库表记录和PostgreSQL9.2.24旧版本中的数据记录保持一致,包括各表数据记录总数,表索引方式等等。总体而言,数据的备份和导入任务是生效的。
     

五、 注意

     在备份数据库表相关数据时候,支持以下三种方式: PostgreSQL9.2.24版本客户端工具pg_dump备份数据,且该版本号的工具psql导入PostgreSQL11.5数据库 ;PostgreSQL9.2.24版本工具pg_dump备份数据,PostgreSQL11.5版本工具psql导入PostgreSQL11.5数据库;PostgreSQL11.5版本工具pg_dump备份数据, 且该版本工具psql导入到该版本的数据库中。

发布了273 篇原创文章 · 获赞 222 · 访问量 51万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览