PostgreSQL版本发布规则,一年一个大版本,一个季度一个小版本;PG遇到的BUG问题,社区会很快进行修复,并在下一个版本中发布,因此有必要进行对数据库版本升级,避免触发已知的BUG带来业务系统的不稳定。本文主要分享一下,PG小版本升级、跨版本升级和借助逻辑复制进行数据库升级。
PG小版本的迭代不会改变内部的存储格式,因此升级小版本只需要安装最新版本后,使用新版本重新启动数据库即可。
安装最新版本数据库
停止数据库实例
对数据目录进行备份
使用新版本启动数据库
调整环境变量,PGHOME/LD_LIRARAY_PATH等
注意:在安装新版本数据库时,要保证数据库块大小一致。
PG大版本升级,在9.4版本之间只能通过pg_upgrade进行,9.4版本之后可以通过第三方扩展插件pg_logical进行逻辑复制升级;10版本社区加入了逻辑复制功能,可以借助逻辑复制进行升级。
使用pg_dumpall备份全局信息,角色和表空间
pg_dumpall-f /tmp/global.sql -g -d postgres -h 127.0.0.1 -p 5432 -U postgres
备份数据
pg_dump-f /tmp/data.sql -h 127.0.0.1 -d dbname -c -C -F p -E utf8 -Upostgres
在新版本数据库中进行恢复
psql-h 127.0.0.1 -d postgres < /tmp/global.sql
psql-h 127.0.0.1 -d postgres < /tmp/data.sql
注意:当数据库较大时,备份恢复耗时较久,严重影响业务
pg_upgrade是官方提供的版本升级工具,有普通模式和Link模式两种升级模式。在普通模式下,会把旧版本的数据拷贝到新版本中,需要确保有足够的磁盘空间存储新旧两份数据;Link模式下,只是在新版本的数据目录中建立了旧版本数据文件的硬连接,可以有效减少磁盘占用的空间。
在升级之前建议使用pg_upgrade-c参数检查新旧版本的兼容性,把每一项不兼容的问题解决后才可以顺利升级,-c参数只会检查新旧版本兼容性,不会运行真正的升级程序,不会修改数据文件,在运行结束后,会输出兼容性结果。
安装新版本并初始化数据目录
如果使用源码编译安装,configure配置和原库一致。可以使用pg_config查看旧版本数据库安装时的配置参数。
检查新旧版本兼容性
pg_upgrade-b /data/old_base -B /data/new_base -d /data/old_data -D/data/new_data -c -p 5432 -P 5433
所有的选项都是OK状态表示,校验通过;否则说明不兼容,根据提示信息进行处理。
停止旧版本数据库
pg_ctlstop -D /data/old_base 并修改pg_hba.conf为本地trust模式
使用pg_upgrade普通模式升级
pg_upgrade-b /data/old_base -B /data/new_base -d /data/old_data -D/data/new_data -p 5432 -P 5433
升级完成后,会生成两个脚本,analyze_new_cluster.sh,该脚本主要是分析收集新库的统计信息等;delete_old_cluster.sh是删除旧数据库的数据。
升级完成后修改相关环境变量并进行数据库验证
逻辑复制功能,从10版本开始内置支持,也可以使用第三方逻辑复制插件pg_logical。逻辑复制是基于逻辑解析,主库将表中的WAL日志解析成一定格式并发送给逻辑备库,逻辑备库收到解析后的WAL日志进行重做,从而实现表数据同步。注意:WAL_LEVEL要设置为LOGICAL级别。
目前不支持DDL解析,只能解析INSERT/UPDATE/DELETE/TRUNCATE
TEMPORARY表和UNLOGGED表不被复制
表必须有PRIMARY KEY或者唯一约束,否则UPDATE、DELETE操作无法复制
序列不被复制
大对象不被复制
新增加的表,不会自动加入订阅
转储全局信息,角色、表空间
pg_dumpall-f /tmp/global.sql -g -d postgres -h 127.0.0.1
转储表结构信息
pg_dump-Fc -s -d postgres -p 5411 -U postgres -f /tmp/lrtest_schema.dmp
在目标端恢复上述备份
在源数据库上创建发布
createpublication test_pg12_upgrade_pub for all tables;
在目标端创建订阅
createsubscription test_pg12_upgrade_sub connection port=5432dbname=postgres user=postgres password=root publicationtest_pg12_upgrade_pub;
默认会复制源端表中现有数据。
监控复制
select * from pg_stat_replication;
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130059.html
摘要:小版本更新不受影响,比如到升级不受影响。下面介绍两种升级方案可供选择,均是官方文档提及的方案官方文档参考。方案命令是直接对旧的数据库目录文件进行升级的方案,直接将旧版本的数据文件格式升级为新版本使用的格式。 PostgreSQL在默认情况下,是不能跨版本升级的(9.4, 9.5, 9.6等等这些版本跨版本升级。小版本更新不受影响,比如9.6.1到9.6.2升级不受影响)。甚至PG为了数...
摘要:但如果涉及到跨大版本升级比如升级到,这种直接替换软件就不行了,因为跨版本的内部存储形式发生了变化官方对于升级提供了种方法,这里迁移我使用了来进行处理细节可以参考官方文档。 1 场景描述 最近使用 postgresql 命令行比较多,就找了个类似 mycli 工具,pgcli,这个是针对 postgresql 的,兴冲冲的安装了 brew install pgcli 没想到这货自动帮我...
摘要:作者谭峰张文升出版日期年月页数页定价元本书特色中国开源软件推进联盟分会特聘专家撰写,国内多位开源数据库专家鼎力推荐。张文升中国开源软件推进联盟分会核心成员之一。 很高兴《PostgreSQL实战》一书终于出版,本书大体上系统总结了笔者 PostgreSQL DBA 职业生涯的经验总结,本书的另一位作者张文升拥有丰富的PostgreSQL运维经验,目前就职于探探科技任首席PostgreS...
摘要:所以就安装了另外一个很喜欢的数据库的已经修复了,后面会补上的安装添加自启动初始化数据库启动数据库服务安装上面是一条命令安装自启动配置略安装 系统升级 阿里云的FreeBSD系统默认安装版本是10.1,这个版本已经超出了官方的维护时间了,所以首先要进行系统的版本升级 设置当前系统版本为10.1-release,setenv UNAME_r 10.1-RELEASE 修改update...
摘要:所以就安装了另外一个很喜欢的数据库的已经修复了,后面会补上的安装添加自启动初始化数据库启动数据库服务安装上面是一条命令安装自启动配置略安装 系统升级 阿里云的FreeBSD系统默认安装版本是10.1,这个版本已经超出了官方的维护时间了,所以首先要进行系统的版本升级 设置当前系统版本为10.1-release,setenv UNAME_r 10.1-RELEASE 修改update...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1860·2023-01-11 13:20
阅读 4100·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3597·2023-01-11 13:20