postgresql数据库升级

pg_upgrade官网介绍:https://www.postgresql.org/docs/10/pgupgrade.html

1.查看老版本数据库编译参数值并记录

select name,setting,unit from pg_catalog.pg_settings where context='internal'

或者在postgres用户下执行如下命令

$ pg_config

重点关注一下四个参数,block_size,segment_size,wal_block_size,wal_segment_size

2.上传新版本PG源码并安装(本例使用PG12演示)

# tar vxf postgresql-12beta1.tar.gz
# cd postgresql-12beta1
# ./configure --prefix=/usr/local/pgsql-12.0  --with-wal-blocksize=8  --with-segsize=1 --with-blocksize=8 
# make -j 10
# make install
# export PATH=$PATH:/usr/local/pgsql-12.0/bin
# cd contrib
# make all
# make install

注意,在编译的时候,一定要保证参数的值和旧版本数据库的值相同,否则后续无法升级

3.初始化新版本数据库

新版本数据库和旧版本数据库的PGDATA必须在同一个文件系统(目录)内才可以使用--link(硬链接)

$ cd /usr/local/pgsql-12.0/bin/
$ ./initdb --wal-segsize=16 -D /pgdata01/data/

pg12中编译时没有wal_segment_size参数,可以在初始化时指定

4.检查是否可以升级

$ cd /tmp
$ mkdir upgrade_log
$ cd upgrade_log
# 使用link硬链接方式的检查
$ /usr/local/pgsql-12.0/bin/pg_upgrade -c -- link -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data
# 使用copy方式的检查 $
/usr/local/pgsql-12.0/bin/pg_upgrade -c -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data

5.检查失败,解决失败问题,检查成功,可以跳过本步骤

本例检查失败,因为旧版本数据库安装了一个插件

可以卸载插件或者在新版本数据库上面安装插件

卸载插件:

psql
drop extension pg_proctab;
\c db01
drop extension pg_proctab;
\c db02
drop extension pg_proctab;
\c db03
drop extension pg_proctab;

因为postgres,db01,db02,db03,db04数据库都安装有插件,因此都卸载掉

新版本数据库安装插件

上傳插件
# unzip pg_proctab-0.0.7.zip
# cd pg_proctab-0.0.7
# export PATH=$PATH:/usr/local/pgsql-12.0/bin/
# make 
# make install 

安装完毕后,再次检查,看是否通过

其他异常请根据检查提示解决

6.开始升级

关闭旧版本数据库

升级有一下两种方式:

copy方式升级

$ /usr/local/pgsql-12.0/bin/pg_upgrade -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data

优点:

copy方式是在旧版本数据库表空间同目录下新建一个新版本数据库的目录并将数据文件复制过来,因此在数据库升级后,如果新旧版本数据库的端口号不一样的话,可以同时开启

缺点:

对于大数据量数据库需要的升级时间较长,且旧版本数据库数据文件所在目录剩余容量至少和现有使用量相同,占据空间

link方式升级

$ /usr/local/pgsql-12.0/bin/pg_upgrade --link -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data

优点:

link方式是在旧版本数据库表空间目录下新建一个目录,并在里面新建一个硬链接直接指向旧版本数据库的数据文件,升级迅速且不占用空间

缺点:

因为旧版本数据库和新版本数据库由于硬链接,因此使用的实际是同一个文件,因此无法同时开启新旧版本数据库

查看是否是硬链接可以进入新版本数据库数据文件所在目录执行ll命令

$ cd /data/tbs/PG_10_201707211/16384
$ ll

结果:

-rw-------. 2 postgres postgres 32768 Jun 26 09:09 16391
-rw-------. 2 postgres postgres     0 Jun 26 09:01 16394
从结果里面可以看到,每一个数据文件2个目录指向它,硬链接

7.修改环境变量

# su - postgres
$ vi .bash_profile

export PGHOME=/usr/local/pgsql
export PGDATA=/pgdata01/data
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib
export PATH=$PATH:$PGHOME/bin

8.修改postgresql.conf和pg_hba.conf文件

9.创建扩展

10.扫尾等

 

 

  

 

 

转载于:https://www.cnblogs.com/monkey6/p/11087786.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值