docker操作Postgres11升级Postgres13实践
操作docker
下载Postgres13的镜像,目前latest是13.3
docker search postgres docker pull postgres
- 下载好镜像根据自己的习惯进行管理
- 设置镜像为东八区
- 打上对应版本的tag
- 重命名Image

- 启动容器
docker run --name postgres \ --network backend \ --restart=always \ -e POSTGRES_USER=用户名 \ -e POSTGRES_PASSWORD=密码 \ -p 5432:5432 \ -v /opt/docker/宿主机路径:/var/lib/postgresql/data \ -d postgres:11.2
备注:操作都是docker启动容器后,进入容器中操作的
备份Postgres11.2的数据
- 使用pg_dump备份指定库数据
docker exec -it -u postgres postgres bash pg_dump -U postgres -Fc -f gitea.sql gitea pg_dump -U postgres -Fc -f gogs.sql gogs
通过11.2的镜像恢复各库数据,验证备份是成功的
- 根据数据库备份数据,可以用restore恢复
hrpg_restore -d gitea gitea.sql hrpg_restore -d gogs gogs.sql
通过13.3的镜像恢复dumpall的数据,验证备份
pg_dumpall -h 127.0.0.1 -U postgres -W > bak_pg_dumpall.sql psql -f bak_pg_dumpall.sql postgres

参考官方文档操作步骤
pg_dumpall > db.out psql -f db.out postgres
验证服务是否可用
- 我备份的gitea是最近正在试用的服务,因此启动gitea看看效果

- 查看日志,然后再看配置,发现是新的容器名字更新了,而gitea的配置还没有跟着更新


- 同步最新配置后,服务启动正常了

问题记录
这种需要关闭pg服务,但是会导致容器退出

在容器中遇见
There seems to be a postmaster servicing the new cluster.
Please shutdown that postmaster and try again.
Failure, exiting
这种错误,然后我执行pg_ctl stop就退出容器了,真是无语,然后删除数据目录下的postmaster.pid,pg_upgrade提醒说集群关的不彻底,仍然无法执行check
The target cluster was not shut down cleanly.
Failure, exiting
该如何在关闭了服务的情况下,还不退出容器,在容器里执行升级的命令?
目前我还没有解决这个问题
这种是防止权限不足导致的异常

最终数据库版本升级是成功的
本次进行Postgres升级大版本给了自己许多警示:
- 数据库这种重要的服务升级要趁早,不能从Postgres10之前的版本进行大版本跨越升级,容易出兼容问题;
- 操作重要的数据,一定要备份和验证,不然进行升级其实也是破坏性的实验
- 操作首先要看官方文档,再上网搜索每个博主的个人经验文档
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Docker Desktop Vmmem内存占用过高问题及完美解决方案
DockerDesktopVmmem内存占用过高问题常见于其基于WSL运行类似虚拟机的机制,通过编辑.wslconfig文件限制WSL资源,可有效降低内存占用,具体操作包括创建.wslconfig文件,调整内存配置,并重启Docker Desktop,需注意内存设置不宜过小,以免影响Docker运行和容器稳定性2024-09-09
IDEA通过Docker插件部署SpringBoot项目的过程详解
在idea中如何通过Docker插件部署SpringBoot项目呢?很多朋友在配置过程中走了很多误区,今天小编给大家分享一篇教程关于IDEA通过Docker插件部署SpringBoot项目的过程,感兴趣的朋友一起看看吧2021-11-11


最新评论