首页 > 数据库 >postgresql13.6升级到14.11实录

postgresql13.6升级到14.11实录

时间:2024-09-23 15:14:38浏览次数:8  
标签:postgresql13.6 postgresql 14 Sep postgresql14 实录 pgsql 14.11 pg

背景与需求

当前生产环境的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 = 10

log_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

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

标签:postgresql13.6,postgresql,14,Sep,postgresql14,实录,pgsql,14.11,pg
From: https://www.cnblogs.com/doctormo/p/18427099

相关文章

  • 关于在Qlabel遮罩方面的踩坑实录
    先看目标效果:想要实现封面图标的遮罩效果,有两个思路:一、在鼠标移动到这个item上面时,重新绘制pixmap例如以下代码:#include<QApplication>#include<QWidget>#include<QPixmap>#include<QLabel>#include<QPainter>#include<QColor>classTransparentOverlayWidg......
  • 国产化:springboot项目TongWeb替换tomcat踩坑实录
    前言全流程记录Tongweb替换Tomcat过程,最终实现为使用内嵌的Tongweb依赖替换SpringBoot默认的Tomcat,所以可直接从第5节开始看如何使用内嵌TongWeb替换Tomcat。1背景国产化浪潮下,项目要求实现web服务器的国产化,使用Tongweb替换Tomcat,商业版的Tongweb是单独启动的一个服务,需要......
  • WiFiAp探究实录--功能实现与源码分析
    wifi热点说的是wifiAp相关,所以如果源码开发的话,这个WifiAp算是一个搜索代码的关键字,含义是WifiAccesspoint,wifi接入点。所以下文中的wifi热点统一用WifiAp代替wifiAp打开方式:设置->更多->移动网络共享->便携式wlan热点。wifiAp打开条件:任何情况下均可。只是有内网外网之分......
  • 旧笔记本安装Win8.1实录
    昨天发现一台尘封已久的LenovoideapadY550,给它装上了Windows10然后第二天系统挂掉了挂的原因是半夜万恶之源Windows更新开始造孽了刚好没电文件全坏了真解除封印因为文件已经没了我索性直接重装系统,降级到Win8.1真香!系统是Win8.1withupdate的精简版,开始菜单有关......
  • k8s安装v1.30.2(contanerd容器运行时)实录
    一、主机准备主机名NATIP系统配置k8s-master192.168.1.201ubuntu18.04.62C2Gk8s-node01192.168.1.202ubuntu18.04.62C2Gk8s-node02192.168.1.203ubuntu18.04.62C2G   二、前提主机配置好网络、ntp,关闭ufw,swap,安装好containerd,runc服务三......
  • 【推研小灶】复旦类脑保研夏令营面试实录:如何突破夏令营的技术壁垒
    欢迎来到【推研小灶】栏目!在这里,我们邀请成功保研的学长学姐们分享他们的宝贵经验和故事。从申请准备到面试技巧,每一位学长学姐都将为你揭示成功保研的秘诀和路径,为你的保研之路提供有力的指导和启发。让我们与你一起追随他们的足迹,共同探索向理想研究生院迈进的道路。更多......
  • RealMAN:大规模真实录制且经过注释的麦克风阵列数据集
        在深度学习驱动的多通道语音增强和声源定位系统的开发中,由于缺乏大规模的真实录制数据集,这些系统的训练在很大程度上依赖于房间脉冲响应(RIR)和多通道扩散噪声的模拟。然而,模拟数据和真实世界数据之间存在的声学失配可能会导致模型在应用于现实场景时性能下降。现有数......
  • SpringBoot 3.x 结合 Swagger3 (Knife4j )踩坑实录
    SpringBoot3.x+Swagger3踩坑实录我的是springboot版本是:3.2.2<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.2</version>......
  • Appium-Python-Client 4.+版本踩坑实录
    Appium-Python-Client4.+版本TouchAction类被appium.webdriver.extensions.action_helpers.ActionHelpers取代使用方法#点击坐标self.driver.tag(positions,duration=duration)#屏幕元素滑动self.driver.scroll(origin_el=origin_el,destination_el=destination......
  • 警惕!自定义注解使用不当的排查实录
    一、引言大家好,在日常开发过程中,Java注解(Annotation)是开发中经常使用的一个手段,用于给代码添加元数据的标记。它们可以提供代码额外的信息,这些信息可以在编译时或运行时被访问。注解不会改变代码的执行逻辑,但可以被编译器、JVM或框架等工具用于生成额外的代码、提供警告或执......