windows上upgrade postgres

一、背景

更新前使用的postgres版本是9.3版本,官方不再支持了. 基于IT安全的要求,需要升级到更高版本,于是打算升级到10.11版本

升级生产环境的数据库版本,一定得慎重再慎重,不然随便出了一点小问题,线上的应用就没办法使用了,而我也是一次升级Postgres,就更加得小心翼翼了. 首先,肯定得参考官方文档,然后在自己的服务器上做测试

在实际操作中,由于是第一次更新数据库,所以遇到的问题还是挺多的,花费了大量时间,因此记录下,也给之后需要升级postgres的同学们排坑!需要注意的是:虽然我测试了几遍数据库更新的过程,但是在实际更新时,还是存在各种各样的问题,导致更新花了很长时间,所以这类升级操作需要在周末进行(也就是免费加班,啊哈哈哈)


二、更新步骤

需要说明的是,postgres升级和一般的软件升级有点不同,一般的软件升级都是直接进行升级,而postgres相当于是安装一个新版本,然后将旧版本的数据迁移到新版本中. 因为postgres部署在windows服务器上,所以相比于部署到linux服务器上更加的麻烦

1.下载10.11版本的postgres

2.停掉老版本的postgres,并安装新版本的postgres( 如果不停掉老版本的postgres,新版本在安装时,端口会存在问题,安装过程其实是一个初始化过程,也可以使用命令去初始化),安装成功后停掉postgres服务(安装成功会自动注册到service中)

3.将两个版本的/data/pg_hba.conf文件设置为不需要密码(防止会报密码相关的错误)

host    all             all             127.0.0.1/32            trust

将md5改成trust,注意不要写成大写的

4.使用新版本的pg_upgrade命令来迁移数据库

在windows下还需要创建postgres用户,并给postgres用户修改目录的权限,在执行以下命令时,要在windows上切换成postgres用户,具体可以查看官方文档

cd 新版本/bin/

./pg_upgrade.exe -b oldbindir -B newbindir -d oldconfigdir -D newconfigdir

5.迁移成功后,将/data/pg_hba.conf文件改回来,并启动新版本的postgres服务

./pg_ctl.exe -D ../data start

在服务启动后,再查看相关的应用是否有受到影响,没受到影响的话,就代表本次更新成功了;就步骤而言,看上去比较简单,但是在实际操作中,难免会遇到各种问题,下面就记录下我遇到的问题以及解决方案


三、遇到的问题以及解决

1.报错connection to database failed: fe_sendauth: no password supplied

这是由于需要密码认证导致的, 修改/data/pg_hba.conf文件,将md5改成trust即可

2.报错The source cluster was not shut down cleanly.

这是由于postgres没有被完全关闭导致的,一般遇到的概率比较小,在关闭时可以使用如下命令即可

./pg_ctl.exe  -D ../data/ stop -s -m fast

3.权限问题

由于本次是在windows下更新postgres,所以还需要注册postgres用户,并给postgres用户相应的权限(也试过不创建用户,通过脚本来操作,但是貌似不行);所以建议大家按照官方文档来操作,我开始是使用 git base来按照linux命令来更新的,花了好多时间都没更新成功,最后还是按照官方文档来了,成功更新了

4.日志查看

在使用pg_upgrade命令进行更新时,会在执行命令的当前目录下产生四个日志文件,里面会存储报错信息,如果出现更新失败的话,就看下这四个日志文件,然后解决下错误即可

5.遇到报错“xx/data/base : No such file or directory”

这是由于执行命令的用户没有base目录的权限导致的,给该用户base目录权限即可解决问题


微信公众号: DevOps入门指南

大家关注下微信公众号!另外,新建了一个微信群,主要是devops/ci/cd相关的话题讨论以及问题解决方案。大家感兴趣的话可以加微信:crazy_boy-smile

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章