PG版本升级

文章详细介绍了PostgreSQL数据库的小版本和大版本升级方法,包括pg_dump和pg_upgrade的适用场景,强调了pg_upgrade的速度优势但需停机,以及逻辑复制在不停机升级中的作用。此外,提到了升级过程中的注意事项,如统计信息的丢失和环境变量的修改。
摘要由CSDN通过智能技术生成

pg生命周期:5个版本,bug不会再修
https://why-upgrade.depesz.com/show?from=9.4&to=9.6.6&keywords=            

查看升级修补的漏洞

1、小版本升级

1.1、如果data、home都没有版本号


只需要替换bin
如果都有版本号

1.2、如果data、home有版本号


编译安装新版本数据库,停止旧版本数据库,
将旧版本数据库的'数据目录'移动到新装的数据库的对应路径,启动该数据库即可。
    例如: mv /pgccc/pgdata_5432 /pgccc/pgdata_5432_19


此种场景下需要修改环境变量信息,设置成新版本的路径
        vim .bash_profile


        source
        (然后先从pghome的地方,bin里面./pg_ctl启动,因为我首次直接pg_ctl启动成别的库了)

        (听老师说要把PATH=$PATH:$PGHOME/bin 写在最上面)
另外如果设置了pg的开机自启服务,还需要修改对应的service文件,防止开机自启服务失效

 

 最后去老的postgres-xx.xx文件下make clean(root用户)

2、大版本升级

2.1、总结


~~
    pg_dump/pg_dumpall+restore/psql
    不适用于大数据库
~~
    pg_upgrade
    速度快,搭配并行和link模式,但是需要停机
~~
    逻辑复制
    最平滑

2.2、总结2

~~
dump/dumpall + restore/psql:
        由于dump+restore总体相对耗时较长,因此不适用于大数据量的数据库,或是写入比较频繁的场景使用。
        尤其是对于核心的业务程序(特别是有99.999保证的程序)来说是不可接受的,好处就是十分安全,
        当然也可以不停机,使用逻辑复制搭配decoder_raw等Plugins解析出备份之后的操作SQL,不过不能保证一致性。
~~
pg_upgrade:
        此方案优势是速度非常快,
        搭配并行和link模式,pg_upgrade –link –jobs xxx,
        但是必须停机升级,并且link模式,会无法使用以前的版本,因此不适用于7x24的场景,
        若使用默认模式,就地升级会导致磁盘使用率增倍,
        好处就是源端还可以用,
        同时假如还有standby或者流复制的场景下,可能还会丢失备库,可以使用官方推荐的rsync模式。
        同时值得注意的是,升级过程目前不会复制数据分布的任何统计数据,
        比如像直方图、最常见的值及其频率之类的东西,
        所以这也是“vacuumdb –analyze-only –analyze-in-stage”的重要性,
        不然复杂查询的性能会受到相当大的影响,还有就是make 、configure编译的参数得保持一致
~~
逻辑复制:
        此方案是最平滑的方案,比较适用于7x24小时以及大数据量场景,停机时间非常短,只有几秒钟,
        同时源端和目标端升级之后假如有需求,还是可以使用的。
        但是配置繁琐,尤其是v10以前的版本,还没有原生逻辑复制,需要第三方扩展,
        第三方扩展除了问题还是黑盒,增加了运维成本,同时还要有集群环境,
        但是原生逻辑复制又不支持序列、DDL(搭配插件pg_ddl_deploy,不过又回到了黑盒来了)、视图等等。

2.3、pg_upgrade

2.31~~~~~~~~~~~~~~
~~~①参数
    pg_upgrade --help
    -b、 --old-bindir=bindir旧集群可执行目录
    -B、 --new bindir=bindir新的集群可执行目录
    -c、 --只检查集群,不更改任何数据
    -d、 --old-datadir=datadir旧集群数据目录
    -D、 --new datadir=datadir新集群数据目录
    -j、 --jobs=要使用的同时进程或线程的数量
    -k、 --链接链接,而不是将文件复制到新群集
    -o、 --旧选项=options要传递到服务器的旧群集选项
    -O、 --new options=options要传递到服务器的新群集选项
    -p、 --旧端口=端口旧集群端口号(默认50432)
    -P、 --新端口=port新集群端口号(默认50432)
    -r、 --成功后保留保留SQL和日志文件
    -U、 --username=NAME集群超级用户(默认为“postgres”)
    -v、 --verbose启用详细的内部日志记录
    -V、 --版本显示版本信息,然后退出
    -?、--帮助显示此帮助,然后退出
~~~②简单介绍:
    关闭新、老库
    再从新库$PGHOME/bin下执行
    ./pg_upgrade -d oldCluster/data -D newCluster/data -b oldCluster/bin -B newCluster/bin
    执行完毕后,清理旧库脚本:
    ./delete_old_cluster.sh    

2.32~~~~~~~~~~~~~~

实践:

~~~①

        我搭建了一套v11.19版本的pg,port=5432

        并在里面创建了表zcj、插入数据如图:

~~~②

        我又搭建了一套v14.2版本的pg

        然后关闭两边的库。

~~~③        

        在新版本PGDATA/bin下面执行pg_upgrade脚本:

    ./pg_upgrade -d /pgccc/pgdata_5432 -D /pgccc/pgdata_5432_14 -b /pgccc/pgdata2/bin -B /pgccc/pgdata_14/bin --j 2 -k 

~~~④

        执行完毕,起库查看是否更新完成



    

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值