IT 邦德

新来个DBA,2T的PG库版本升级如此娴熟,佩服佩服~~

Image
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验
擅长主流数据Oracle、MySQL、PG、openGauss运维
备份恢复,安装迁移,性能优化、故障应急处理等

•••
微信:jem_db
QQ交流群:587159446
公众号:IT邦德

@

  • 1.确认旧库编译

  • 2.安装新版本数据库

  • 3.新版数据库初始化目录

  • 4.旧版本数据库进行备份

  • 5.停旧版本数据库

  • 6.检查新旧数据库版本兼容性

  • 7.升级数据库

  • 8.启动新版本数据库

  • 9.调整环境变量

  • 10.收集统计信息

  • 11.删除旧版本数据库的数据

  • 12.总结

本文详细讲解了从14.11升级到15.6,使用pg_dumpall进行备份恢复升级的过程

1.确认旧库编译

如果使用源码编译安装,configure 配置和原库一致。
可以使用pg_config查看旧版本数据库安装时的配置参数。
Image

2.安装新版本数据库

[root@pgpcp ~]# cp /opt/postgresql-15.6.tar.gz /pgccc/soft
[root@pgpcp ~]# chown -R postgres:postgres /pgccc/soft
[root@pgpcp ~]# chmod -R 775 /pgccc/soft

[root@pgpcp ~]# su - postgres
[postgres@pgpcp ~]$ cd /pgccc/soft/
[postgres@pgpcp soft]$ tar zxvf postgresql-15.6.tar.gz

[postgres@pgpcp ~]$mkdir -p /pgccc/pgsql-15
[postgres@pgpcp ~]$cd /pgccc/soft/postgresql-15.6
[postgres@pgpcp postgresql-15.6]$./configure --prefix=/pgccc/pgsql-15 --without-readline

Image
--编译及安装
[postgres@pgpcp postgresql-15.6]$ make && make install
Image

3.新版数据库初始化目录

注意:只初始化数据库,不启动
/pgccc/pgsql-15/bin/initdb -D \
/pgccc/pgsql-15/pgdata -E UTF8 \
--locale=en_US.utf8 -U postgres
Image

4.旧版本数据库进行备份

pg_dumpall -Upostgres -f \
/home/postgres/dumpall_data.sql
Image

5.停旧版本数据库

pg_ctl -D /pgccc/pgdata stop
Image

6.检查新旧数据库版本兼容性

注意:如果版本兼容性有问题,需要解决
cd /pgccc/pgsql-15/bin/
./pg_upgrade --old-datadir /pgccc/pgdata/ \
--new-datadir /pgccc/pgsql-15/pgdata/ \
--old-bindir /pgccc/pgsql-14/bin/ \
--new-bindir /pgccc/pgsql-15/bin/ --check
Image

7.升级数据库

cd /pgccc/pgsql-15/bin/
./pg_upgrade --old-datadir /pgccc/pgdata/ \
--new-datadir /pgccc/pgsql-15/pgdata/ \
--old-bindir /pgccc/pgsql-14/bin/ \
--new-bindir /pgccc/pgsql-15/bin/
Image

8.启动新版本数据库

cd /pgccc/pgsql-15/bin/
./pg_ctl -D /pgccc/pgsql-15/pgdata/ start
Image

9.调整环境变量

vi /home/postgres/.bash_profile

export PATH
export PS1="[\u@\h \W]\$"
export LANG=en_US.UTF-8
export PGPORT=5432
export PGDATA=/pgccc/pgsql-15/pgdata
export PGHOME=/pgccc/pgsql-15
export PATH=/pgccc/pgsql-15/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:.
export PGUSER=postgres
export PGDATABASE=postgres

[postgres@pgpcp ~]$source /home/postgres/.bash_profile

10.收集统计信息

vacuumdb --all --analyze-in-stages
Image

11.删除旧版本数据库的数据

cd /pgccc/pgsql-15/bin/
./delete_old_cluster.sh
Image

12.总结

Postgresql是一个非常活跃的社区开源项目,更新速度很快,每一次版本的更新都会积极的修复旧版本的BUG,性能上也会有不同幅度的提升。