postgresql13.6升级到14.11实录

news/2024/9/23 15:19:03

背景与需求

当前生产环境的gitlab版本使用的postgresql 版本为13.6, 按gitlab官方版本要求, gitlab 17.X 版本 ,Minimum PostgreSQL version 为14.9 (参考gitlab版本要求 ),因此 要升级gitlab版本的话,必须先升级postgresql数据库。

版本描述

  • 当前版本:13.6
  • 目标版本:14.11

postgresql源码包下载地址

升级步骤

(1) 在原postgresql数据库服务器安装新版本, 路径与原来不同(包括数据文件,归档,软件路径等等)
(2) 使用pg_upgrade命令检查升级
(3) 关闭老版本postgresql数据库,使用pg_upgrade命令升级
(4) 拷贝老版本postgresql数据库参数文件postgresql.conf、ph_hba.conf文件到新版本数据库目录
(5) 按实际情况修改postgresql.conf、ph_hba.conf
(6) 修改/etc/profile 环境变量
(7) 修改postgresql.service 文件,改为使用新版本数据库

环境描述

操作系统环境:

# lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.9.2009 (Core)
Release:        7.9.2009
Codename:       Core

postgresql 环境:

postgres=# select version();version                                                 
---------------------------------------------------------------------------------------------------------PostgreSQL 13.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)

生产环境为流复制环境,主备版本均为13.6。 本地升级需要将主备版本均升级为14.11版本。

下面命令如无特殊说明, # 均表示操作系统root执行(进入postgresql里除外), $ 均表示pgsql用户执行

具体升级步骤

(1) 规划

当前的postgresql安装在/postgresql下,(我这里是用pgsql用户管理的postgresql数据库), 具体如下

# ls -alrt /postgresql/
dr-xr-xr-x. 20 root  root  4096 Sep 29  2022 ..
drwxr-xr-x   2 pgsql pgsql    6 Sep 29  2022 scripts
drwxr-xr-x   2 pgsql pgsql    6 Sep 29  2022 soft
drwxr-xr-x   2 pgsql pgsql    6 Sep 29  2022 backup
drwxr-xr-x   6 pgsql pgsql   56 Sep 29  2022 pg13       --- 软件安装路径
drwxr-xr-x   2 pgsql pgsql  294 Sep 14 16:39 archive    --- 归档目录
drwx------  19 pgsql pgsql 4096 Sep 14 16:39 pgdata     --- 数据目录
drwx------  19 pgsql pgsql 4096 Sep 14 16:39 pg_log     --- 日志目录

计划postgresql 14版本创建全新的目录/postgresql/postgresql14, 目录结构如下:

# ls -alrt /postgresql/postgresql14/
total 4
drwxr-xr-x 11 pgsql pgsql  137 Sep 14 16:14 ..
drwxr-xr-x  6 pgsql pgsql   56 Sep 14 16:18 pg14        --- 软件安装目录
drwxr-xr-x  2 pgsql pgsql    6 Sep 14 16:27 soft
drwxr-xr-x  2 pgsql pgsql    6 Sep 14 16:27 scripts
drwxr-xr-x  2 pgsql pgsql    6 Sep 14 16:27 backup
drwxr-xr-x  9 pgsql pgsql  102 Sep 14 16:27 .
drwxr-xr-x  2 pgsql pgsql   20 Sep 14 16:55 pg_log      --- 日志目录
drwxr-xr-x  2 pgsql pgsql   70 Sep 14 17:25 archive     --- 归档目录
drwx------ 19 pgsql pgsql 4096 Sep 14 17:25 pgdata      --- 数据目录

也就是新的不影响老的。

(2) 安装postgresql 14.11 版本

安装postgresql 14.11 版本(下面使用root用户操作)

mkdir -p /postgresql/postgresql14/{pgdata,archive,scripts,backup,pg14,soft,pg_log}
tar zxvf postgresql-14.11.tar.gz
cd postgresql-14.11
./configure --prefix=/postgresql/postgresql14/pg14 --without-readline --with-perl --with-python
make
make install
cd contrib/pg_trgm/
make && make install
cd ../btree_gist extension
make && make install
chown -R pgsql.pgsql /postgresql/postgresql14

至此,postgresql 14.11 版本软件就已经安装好了。 安装到了/postgresql/postgresql14/pg14

(3) 初始化postgresql 14.11 数据库

# su - pgsql 
$ /postgresql/postgresql14/pg14/bin/initdb -D /postgresql/postgresql14/pgdata -E UTF8 --locale=en_US.utf8 -U postgres

(4) 使用pg_upgrade命令检查升级

$ /postgresql/postgresql14/pg14/bin/pg_upgrade -d /postgresql/pgdata -D /postgresql/postgresql14/pgdata -b /postgresql/pg13/bin -B /postgresql/postgresql14/pg14/bin -c

(5) 关闭老版本数据库,开始正式升级

在检查升级无报错后,去掉 -c参数,开始正式升级

# systemctl stop postgresql.service
# su - pgsql
$ /postgresql/postgresql14/pg14/bin/pg_upgrade -d /postgresql/pgdata -D /postgresql/postgresql14/pgdata -b /postgresql/pg13/bin -B /postgresql/postgresql14/pg14/bin 
$ chmod 700 /postgresql/postgresql14/pgdata

(6) 修改配置文件

按实际情况修改postgresql.conf、ph_hba.conf,/etc/profile postgresql.service , 使用新的数据库路径。

# cat pgdata/postgresql.conf 
listen_addresses = '*'
port = 5432                             
max_connections = 1000                
unix_socket_directories = '/postgresql/postgresql14/pgdata'  # comma-separated list of directories# - Authentication -  
password_encryption = md5
# - Memory -  
shared_buffers = 12GB    ## 1/4 of the memory  
dynamic_shared_memory_type = posix# WRITE-AHEAD LOG 
wal_level = replica
max_wal_size = 4GB
min_wal_size = 1024MB# - Archiving -   
archive_mode = on
archive_command = 'cp %p /postgresql/postgresql14/archive/%f'
#archive_command = '/bin/date'# REPLICATION
max_wal_senders = 10 
wal_keep_size = 1000
wal_sender_timeout = 120s
max_slot_wal_keep_size = 10log_directory = 'pg_log'                        
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
log_truncate_on_rotation = off          
log_rotation_age = 1d                  
log_rotation_size = 0
log_timezone = 'Asia/Shanghai'
datestyle = 'iso, mdy'
timezone = 'Asia/Shanghai'
lc_messages = 'en_US.utf8'                      
lc_monetary = 'en_US.utf8'                      
lc_numeric = 'en_US.utf8'                      
lc_time = 'en_US.utf8'                       
default_text_search_config = 'pg_catalog.english'

(7) 启动新版本数据库,修改postgresql.service ,环境变量等,升级插件

# vim /usr/lib/systemd/system/postgresql.service 
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
After=network.target
[Service]
Type=forking
User=pgsql
Group=pgsql
Environment=PGPORT=5432
Environment=PGDATA=/postgresql/pgdata
OOMScoreAdjust=-1000
ExecStart=/postgresql/pg13/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/postgresql/pg13/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/postgresql/pg13/bin/pg_ctl reload -D ${PGDATA} -s
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=300
[Install]
WantedBy=multi-user.target# vim /etc/profile
export PGPORT=5432
export PGDATA=/postgresql/pgdata
export PGHOME=/postgresql/pg13
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres
alias psql='rlwrap psql'# systemctl start postgresql.service
# su - pgsql
$ psql
postgres=# \i /home/pgsql/update_extensions.sql

(8) 安装pg_rman-REL_14_STABLE, 重新备份

# unzip pg_rman-REL_14_STABLE.zip 
# cd pg_rman-REL_14_STABLE/
# make && make install
# su - pgsql
$ pg_rman -B /db_backup/backup init
INFO: ARCLOG_PATH is set to '/postgresql/postgresql14/archive'
INFO: SRVLOG_PATH is set to '/postgresql/postgresql14/pgdata/pg_log'
$ pg_rman backup --backup-mode=full --backup-path=/db_backup/backup
$ pg_rman validate --backup-mode=full --backup-path=/db_backup/backup

(9) 收尾工作,总结

为了目录结构好看一点,将老的postgresql文件全部移动到一个目录下。

# mkdir /postgresql/postgresql13
# cd /postgresql
# mv archive  backup  opt  pg13  pgdata scripts  soft postgresql13

这个方式升级还是比较保险的,但是要停机(较长时间,视库的大小而定),这个是最大的弊病。
如果可以新升级从库,然后切换至从库,再升级主库的话,就可以极大减少停机时间,但目前不确定不同版本搭建流复制是否有暗病。因此为了保险起见,还是安排停机升级。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63783.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Axure原型设计:多层级动态表格

多层级表格又成为树形表格,是在后台常用的一种表格形式,当表格数据存在多层级关系是,可以通过多层级表格,从而更加清晰的呈现数据内容,帮助人们更好地理解和分析数据之间的关系,从而更加有效地传递信息。 所以今天作者就教大家怎么在Axure里制作多层级动态表格,包括展开…

frp内网穿透 宝塔部署服务端、客户端教程

宝塔部署教程链接:https://blog.csdn.net/m0_57944649/article/details/140693257 frp官方下载链接:https://github.com/fatedier/frp/releases一、部署服务端1、上传好文件后解压2、进入解压好了的文件夹“frp_0.58.1_linux_amd64”中,找到文件“frps.toml”,双击打开: …

建立数据库连接时出现错误:原因与解决方案

建立数据库连接时出现错误的原因可能有很多,以下是一些常见的原因及其解决方案: 原因登录信息错误:账号、密码、服务器名称或数据库名称不正确。网络问题:客户端与数据库服务器之间的网络连接不稳定或中断。数据库服务未启动:数据库服务没有运行,或者在尝试连接时服务停止…

数据库连接失败的解决方法有哪些

当遇到数据库连接失败的情况时,可以按照以下步骤进行排查和解决:检查数据库服务状态:确认数据库服务是否已启动并运行正常。可以使用阿里云控制台的服务监控工具或通过SSH登录服务器,使用命令行工具(如service mysqld status)来检查服务状态。验证网络连接:确保你的应用…

数据库常见十大错误_数据库十大报错语句

数据库操作时可能会遇到各种错误,这些错误通常是由不同的原因引起的,比如语法错误、连接问题、权限问题等。下面是数据库操作中常见的几种错误类型及其解决思路:连接失败:错误信息可能包括“无法连接到主机”、“连接被拒绝”等。检查数据库服务是否启动、网络连接是否正常…

阿里云主机数据库链接失败怎么回事

阿里云主机数据库连接失败的问题可能有多种原因,这里列举了一些常见的原因及解决办法:网络问题:确认你的网络连接是否正常。尝试使用其他设备或网络连接来验证问题是否出在网络方面。防火墙设置:确保防火墙没有阻止数据库连接。可以尝试临时禁用防火墙,或添加相应的规则来…

收藏:加不加「/」?Nginx location 路径与 proxy_pass 的规律

从一张梗图开始 起源于在 TG 某个频道看到的一张图:图下面的评价是:Nginx is so hard! 实际上这张图描述的是 nginx location 的路径配置,及 location 代码块中 proxy_pass 的路径关系,属于 nginx 应用中路径转发的知识。例如图中 Case 1 对应的代码块应该为:location /te…