当前位置: 首页 > ops >正文

postgresql9.2.4 跨版本升级14.6

目前小版本升级的步骤:

1.安装最新版本数据库

2.停止数据库实例

3.对数据目录进行备份

4.使用新版本启动数据库

5.调整环境变量,PGHOME/LD_LIRARAY_PATH等

目前PG大版本的升级方法主要有以下四种方式:

1.转储数据的方式(pg_dump或pg_dumpall导出数据,pg_restore或psql导入)

2.通过pg_upgrade进行升级

3.pg_logical 扩展进行升级

4.通过内置逻辑复制的方式进行版本升级

注:不管如何升级,升级前,都需要做备份!避免意外情况,导致数据异常无法恢复。

一、postgres9.2.4版本安装

1、创建用户
[root@vkeep ~]# groupadd postgres
[root@vkeep ~]# useradd -g postgres postgres -m -s /bin/bash
[root@vkeep ~]# echo "Database@123" | passwd --stdin postgres

2、安装依赖包
[root@vkeep ~]# yum install gcc gcc-c++ zlib-devel readline readline-devel perl-ExtUtils-Embed pam-devel openssl openssl-devel cmake libxslt-devel libxml2-devel openldap-devel python-devel tcl tcl-devel bison flex xmlto -y

3、创建数据库目录
[root@vkeep ~]# mkdir -p /data/postgres9/{soft,postgresql,pgdata}
[root@vkeep ~]# chown -R postgres: /data

4、创建环境变量
[root@vkeep ~]# su - postgres
[postgres@vkeep ~]$ echo 'export PGPORT=5432
export PG_HOME=/data/postgres9/postgresql
export PATH=$PG_HOME/bin:$PATH
export PGDATA=/data/postgres9/pgdata
export LD_LIBRARY_PATH=$PG_HOME/lib
export LANG=en_US.utf8
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres
' >> ~/.bash_profile && source  ~/.bash_profile

5、上传源码包,并解压
# 解压源码包
[postgres@vkeep ~]$ cd /data/postgres9/soft/
[postgres@vkeep soft]$ tar -zxf postgresql-9.2.4.tar.gz

6、编译源码包
[postgres@vkeep soft]$ cd postgresql-9.2.4/
[postgres@vkeep postgresql-9.2.4]$ ./configure --prefix=/data/postgres9/postgresql --with-pgport=5432 --with-openssl --with-perl \
--with-tcl --with-python --with-pam --without-ldap --with-libxml --with-libxslt \
--enable-thread-safety --with-wal-blocksize=16 --with-blocksize=8

7、安装数据库
[postgres@vkeep postgresql-9.2.4]$ make -j 4 && make install

8、初始化数据库
[postgres@vkeep postgresql-9.2.4]$ # 初始化数据库集簇
[postgres@vkeep postgresql-9.2.4]$ initdb -D $PGDATA -W 

9、启动数据库
[postgres@vkeep postgresql-9.2.4]$ pg_ctl -D $PGDATA start

10、创建数据库用户和数据库
[postgres@vkeep pgdata]$ psql -d postgres -p 5432
postgres=# create database testdb;
postgres=# create user keep with Superuser password  'keep';

11、配置远程连接

# 配置连接

[postgres@vkeep pgdata]$ cd $PGDATA
[postgres@vkeep pgdata]$ sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" postgresql.conf
[postgres@vkeep pgdata]$ echo 'host all all 0.0.0.0/0 md5' >> pg_hba.conf

# 重启数据库

[postgres@vkeep pgdata]$ pg_ctl stop
[postgres@vkeep pgdata]$ pg_ctl -D $PGDATA start

# 验证远程连接

[postgres@vkeep pgdata]$ psql -d testdb -U keep -p 5432 -h 192.168.140.96

二、postgres14.6版本安装

1、创建数据库目录
[postgres@vkeep ~]# mkdir -p /data/postgres14/{soft,postgresql,pgdata}

2、上传源码包,并解压
# 解压源码包
[postgres@vkeep ~]$ cd /data/postgres14/soft
[postgres@vkeep soft]$ tar -zxf postgresql-14.6.tar.gz

3、编译源码包
[postgres@vkeep soft]$ cd postgresql-14.6
[postgres@vkeep postgresql-14.6]$ ./configure --prefix=/data/postgres14/postgresql --with-pgport=54321 --with-openssl --with-perl \
--with-tcl --with-python --with-pam --without-ldap --with-libxml --with-libxslt \
--enable-thread-safety --with-wal-blocksize=16 --with-blocksize=8

4、安装数据库
[postgres@vkeep postgresql-14.6]$ make -j 4 && make install

5、初始化数据库
[postgres@vkeep postgresql-14.6]$ /data/postgres14/postgresql/bin/initdb -D /data/postgres14/pgdata -W

三、创建测试数据

此处不严谨:由于pg9.2.4没有pgbench命令,所以用pg14版本生成数据

[postgres@vkeep ~]$ /data/postgres14/postgresql/bin/pgbench -i -s 10 -U postgres testdb
[postgres@vkeep ~]$ psql testdb
psql (9.2.4)
Type "help" for help.testdb=# \dList of relationsSchema |       Name       | Type  |  Owner
--------+------------------+-------+----------public | pgbench_accounts | table | postgrespublic | pgbench_branches | table | postgrespublic | pgbench_history  | table | postgrespublic | pgbench_tellers  | table | postgres
(4 rows)testdb=# select count(1) from pgbench_accounts;count
---------1000000
(1 row)testdb=# select count(1) from pgbench_branches ;count
-------10
(1 row)testdb=# select count(1) from pgbench_history ;count
-------0
(1 row)testdb=# select count(1) from pgbench_tellers ;count
-------100
(1 row)

四、进行升级

1、兼容性比较
# 注意:需要停止新旧版本数据库的进程
[postgres@vkeep ~]$ /data/postgres14/postgresql/bin/pg_upgrade -c -k -b /data/postgres9/postgresql/bin -B /data/postgres14/postgresql/bin -d /data/postgres9/pgdata -D /data/postgres14/pgdata -p 54321 -P 5432

2、执行升级
pg_upgrade升级有三种方式。
1)常规复制方式;不会对旧集簇产生影响,但是当数据文件大时速度慢。
/data/postgres14/postgresql/bin/pg_upgrade -b /data/postgres9/postgresql/bin -B /data/postgres14/postgresql/bin -d /data/postgres9/pgdata -D /data/postgres14/pgdata -p 5432 -P 543212)link链接方式;以硬链接方式重用旧的用户数据文件来执行快速升级,节省磁盘空间,但升级后旧集簇不可用,恢复耗时。
/data/postgres14/postgresql/bin/pg_upgrade -k -b /data/postgres9/postgresql/bin -B /data/postgres14/postgresql/bin -d /data/postgres9/pgdata -D /data/postgres14/pgdata -p 5432 -P 543213)clone 克隆方式;结合以上两者的优势,它支持在Linux(内核4.5或更高版本)上的Btrfs和XFS(在文件系统创建reflink支持)。
/data/postgres14/postgresql/bin/pg_upgrade --clone -b /data/postgres9/postgresql/bin -B /data/postgres14/postgresql/bin -d /data/postgres9/pgdata -D /data/postgres14/pgdata -p 5432 -P 54321# 如果升级报错,需要重新初始化新集群# 小写为旧集群配置,大写为新集群配置
-p, --old-port=PORT           old cluster port number (default 50432)
-P, --new-port=PORT           new cluster port number (default 50432)# 如果报错:/data/postgres14/postgresql/bin/psql: symbol lookup error: /data/postgres14/postgresql/bin/psql: undefined symbol: PQsetErrorContextVisibility,执行下面语句
export LD_LIBRARY_PATH=/data/postgres14/postgresql/lib:$LD_LIBRARY_PATH

升级

[postgres@vkeep ~]$ /data/postgres14/postgresql/bin/pg_upgrade -b /data/postgres9/postgresql/bin -B /data/postgres14/postgresql/bin -d /data/postgres9/pgdata -D /data/postgres14/pgdata -p 5432 -P 54321
Performing Consistency ChecksUpgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:/data/postgres14/postgresql/bin/vacuumdb --all --analyze-in-stagesRunning this script will delete the old cluster's data files:./delete_old_cluster.sh

3、修改环境变量
[postgres@vkeep ~]$ cat .bash_profileexport PGPORT=5432
export PG_HOME=/data/postgres14/postgresql
export PATH=$PG_HOME/bin:$PATH
export PGDATA=/data/postgres14/pgdata
export LD_LIBRARY_PATH=$PG_HOME/lib
export LANG=en_US.utf8
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres[postgres@vkeep ~]$ source .bash_profile
4、修改配置文件
[postgres@vkeep ~]$ cat >> /data/postgres14/pgdata/postgresql.conf <<"EOF"
listen_addresses = '*'
port=5432
unix_socket_directories='/data/postgres14/pgdata'
EOF[postgres@vkeep ~]$ echo 'host all all 0.0.0.0/0 md5' >> /data/postgres14/pgdata/pg_hba.conf
5、启动数据库,收集统计信息
[postgres@vkeep ~]$ pg_ctl start
[postgres@vkeep ~]$ /data/postgres14/postgresql/bin/vacuumdb --all --analyze-in-stages

6、查看数据
[postgres@vkeep ~]$ psql
psql (14.6)
Type "help" for help.postgres=# \lList of databasesName    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
-----------+----------+----------+------------+------------+-----------------------postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +|          |          |            |            | postgres=CTc/postgrestemplate1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | postgres=CTc/postgres+|          |          |            |            | =c/postgrestestdb    | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
(4 rows)postgres=# \c testdb
You are now connected to database "testdb" as user "postgres".
testdb=# \dtList of relationsSchema |       Name       | Type  |  Owner
--------+------------------+-------+----------public | pgbench_accounts | table | postgrespublic | pgbench_branches | table | postgrespublic | pgbench_history  | table | postgrespublic | pgbench_tellers  | table | postgres
(4 rows)testdb=# select count(1) from pgbench_accounts;count
---------1000000
(1 row)testdb=# select version();version
---------------------------------------------------------------------------------------------------------PostgreSQL 14.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit
(1 row)

7、清理旧版本数据(可选)
安装完之后....
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:/data/postgres14/postgresql/bin/vacuumdb --all --analyze-in-stagesRunning this script will delete the old cluster's data files:./delete_old_cluster.sh
[postgres@vkeep ~]$ ls
delete_old_cluster.sh
http://www.xdnf.cn/news/19859.html

相关文章:

  • 25高教社杯数模国赛【B题超高质量思路+问题分析】
  • 渲染是否伤电脑?从根源减少损伤的技巧
  • 字符串(1)
  • Bug 排查日记:一次曲折的技术解谜之旅
  • matlab 数据分析教程
  • 科学研究系统性思维的方法体系:质量控制
  • Redis C++ 实现笔记(F篇)
  • C/C++关键字——union
  • Python开篇撬动未来的万能钥匙 从入门到架构的全链路指南
  • 《IC验证必看|semaphore与mailbox的核心区别》
  • [从零开始面试算法] (11/100) LeetCode 226. 反转二叉树:递归的“镜像”魔法
  • RabbitMQ学习笔记
  • 找活招工系统源码 雇员雇主小程序 后端JAVA前端uniapp
  • 《云原生深坑实录:让团队卡壳的不是配置,是底层逻辑盲区》
  • 基于扣子平台构造AutoGen框架的多智能体使用-----封装成FastAPI接口供调用
  • JVM:程序计数器
  • 基于Matlab狭窄空间环境中多无人机自重构V字队形方法研究
  • 《清远市市级政务信息化服务项目立项审批细则(试行)》标准解读
  • Jenkins调用Ansible构建LNMP平台
  • 深入探索 WebSocket:构建实时应用的核心技术
  • DarkHole: 2靶场渗透
  • 用 SPL 编写阿里云 FC2.0 函数
  • AntdesignVue 的月份区间组件用法
  • mysql分页SQL
  • Dubbo(分布式RPC调用和分布式文件储存)
  • 深入解析Django重定向机制
  • 2025React面试题集锦
  • Java 与 Docker 的最佳实践
  • wins中怎么用一个bat文件启动jar包和tomcat等多个服务
  • Linux tail 命令使用说明