Gitlab升级PGSQL12

gitlab的版本是老的,之前用的pg版本为11.x。后来升级到13.9.4了,没有执行升级pg的操作,但是从13.3开始提供了PG12的包,并从13.7开始默认安装PG12的包,现在最新的版本是13.12.15,想升级上去,也为未来准备升级14.x做准备,所以先升级了PG到12,记录一下问题。

文档:
升级PG

一、准备
备份数据

# GitLab 12.2 或更高版本:
sudo gitlab-backup create
sudo gitlab-ctl backup-etc
# 把配置文件备份cp备份出去

二、升级PostgreSQL

注意:升级会停机

sudo gitlab-ctl pg-upgrade

gitlab-ctl pg-upgrade 执行以下步骤:

  • 检查以确保数据库处于已知的良好状态。
  • 检查是否有足够的可用磁盘空间,否则中止。您可以通过附加--skip-disk-check标志来跳过此步骤。
  • 关闭现有数据库、任何不必要的服务,并启用 GitLab 部署页面。
  • 更改/opt/gitlab/embedded/bin/PostgreSQL 中的符号链接以指向较新版本的数据库。
  • 创建一个新目录,其中包含一个新的空数据库,其区域设置与现有数据库相匹配。
  • 使用该pg_upgrade工具将数据从旧数据库复制到新数据库。
  • 将旧数据库移开。
  • 将新数据库移动到预期位置。
  • 调用sudo gitlab-ctl reconfigure以进行所需的配置更改并启动新的数据库服务器。
  • 运行ANALYZE以生成数据库统计信息。
  • 启动剩余的服务并删除部署页面。
  • 如果在此过程中检测到任何错误,它将恢复到旧版本的数据库。

如果不出意外,升级会在配置更改启动新数据库服务器时出错,报启动pg失败,启动连接timeout了

sudo gitlab-ctl tail postgresql

这是因为老版本的gitlab.rb 的配置中,“dynamic_shared_memory_type” 参数为none,升级为12后,不能使用none了,需要修改掉

vim /etc/gitlab/gitlab.rb
    # 注释掉
    #postgresql['dynamic_shared_memory_type'] = 'none'
# 重新配置gitlab
sudo gitlab-ctl reconfigure
# 查看postgresql的状态是否启动成功,如果没有就手动重启一下
sudo gitlab-ctl status
# sudo gitlab-ctl restart postgresql

$ /opt/gitlab/embedded/bin/postgres --version
postgres (PostgreSQL) 12.5

三、生成数据库统计信息

sudo gitlab-psql -c "SELECT relname, last_analyze, last_autoanalyze FROM pg_stat_user_tables WHERE last_analyze IS NULL AND last_autoanalyze IS NULL;"

执行上诉sql,如果有任何输出,则手动运行:

sudo gitlab-psql -c 'SET statement_timeout = 0; ANALYZE VERBOSE;'

四、删除部署状态
因为在执行pg-upgrade时,启动pg启动失败导致没有在正确状态下执行删除部署状态页面,导致即使现在gitlab-ctl status都是正常的,但是首页还是显示 "Deploy in progress",所以手动退出部署状态

sudo gitlab-ctl deploy-page down

五、清理旧数据库文件
在验证您的 GitLab 实例运行正常后,您可以清理旧的数据库文件:

sudo rm -rf /var/opt/gitlab/postgresql/data.
sudo rm -f /var/opt/gitlab/postgresql-version.old

如果修改了 postgresql['data_dir'] = /data/gitlab/postgresql/data ,那么应该删除的路径为:

sudo rm -rf /data/gitlab/postgresql/data.
sudo rm -f /var/opt/gitlab/postgresql-version.old

你可能感兴趣的:(Gitlab升级PGSQL12)