暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【每日分享】2022.07.19 升级

原创 Maleah 2022-07-20
504

PG 升级

PostgreSQL是活跃的社区,拥有庞大的用户群体,也是基本每年稳定更新一个大版本(或主版本,major),大版本主要是添加新功能或对现有功能的增强,每几个月会维护一个小版本(或次要版本,miner),小版本通常包括错误补丁,安全漏洞的修复或是对现有功能的改进。当用户有某种需求,比如要实现分区表的逻辑复制,13版本基本可以实现,此时就可以升级到对应的版本。

那对于大版本和小版本怎么升级呢?

小版本

通常小版本的升级只需要替换二进制文件即可。编译安装一个新版本的数据库(不需要初始化),启动的时候使用原来的数据目录

大版本

大版本的升级相对于小版本来说可能相对复杂一些,通常需要将整个数据库转储到一个新的数据目录,使用较新的二进制文件或者pg_update来初始化

1)pg_dumpall
/opt/pg13/bin/pg_dumpall > /backup/dumpall/dumpall.sql
/opt/pg13/bin/psql -p 7000 -f /backup/dumpall/dumpall.sql

注:

  • 使用高版本的工具导入导出;

  • contrib文件中的扩展可以通过dumpall自动创建,而对于不属于contrib的扩展需要自行编译安装

2)pg_dump/pg_restore

注:

  • pg_dump需要对每个数据库单独导出;

  • 在使用pg_dump导出,pg_restore恢复数据允许使用并行

3)pg_update

注:

  • 升级前需要先关闭低版本数据库

  • 执行pg_upgrade进行升级时可以选择是否重新拷贝一份数据目录,-k | --link选项。默认不加,则会重新拷贝一份文件到新集簇;使用–link选项,使用硬链接来代替文件的拷贝,此时新旧集簇共用同一份数据目录,所以如果新集簇已经启动,此时再启动会报错:

    [postgres@node1 data6000]$ /opt/pg12/bin/pg_ctl start -D /soft/pg12/data6000
    waiting for server to start....postgres: could not find the database system
    Expected to find it in the directory "/soft/pg12/data6000",
    but could not open file "/soft/pg12/data6000/global/pg_control": No such file or directory
    stopped waiting
    pg_ctl: could not start server
    Examine the log output.
    

    使用–link选项省去copy旧集簇的数据目录,相对更快

  • 只能在兼容的版本数据库执行pg_upgrade升级

4)pglogical插件

pglogical是PostgreSQL支持的扩展模块,为PostgreSQL的数据库提供了逻辑流复制发布和订阅的功能,相较于原生PG的逻辑复制功能做了一些增强,比如说可以同步表、序列、索引等

跨版本升级可以通过逻辑复制把数据转储到新版本的数据库,具体的用法可以参考pglogical官网

小结

相对来说,pglogical+逻辑复制的这样一种方法停机时间相对较短,且支持跨平台迁移,使用范围比较灵活;pg_dump、pg_dumpall是逻辑备份与恢复的方式,停机时间取决于数据库的大小,由于需要对数据进行导入导出,所以对于中小型的数据库来说还是比较友好的;pg_upgrade相较于前面两种方法来说有一定的局限性,适用于本机的就地升级且两个数据库版本要兼容,升级方法相对于更便捷,只需要执行pg_upgrade命令即可

ps:昨天晚上本来要发的,电脑不工作死机了,拖到今天才发

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论