首页
首页
文章目录
  1. 简介
  2. 思路
  3. 安装postgresql9.6.6
  4. 使用pg_upgrade升级pgsql版本
    1. 下载postgresql11.2源码包,解压安装到新的目录
    2. 切换到postgres用户下使用新版本初始化一个新的数据库
    3. 配置pgsql11的pg_hba.conf,保证pg_upgrade可以连接新旧俩个库
    4. 停止pgsql9.6数据库
    5. 使用pg_upgrade执行升级
    6. 收尾工作

postgresql9.6.6 升级到11.2过程记录

简介

公司一个项目上使用的是postgresql9.6 现在随着业务的增加,数据量也越来越大,随着postgresql11的发布,pg11原生支持了分表功能,所以就有了今天这篇文章。
《postgresql9.6.6 升级到11.2过程记录》

思路

针对postgresql跨版本升级官方是给了三种升级方式

  • pg_dumpall
    pg_dumpall是一种把数据从旧版本逻辑导出,再导入新版本的方法,就是一个导出导入的过程。
  • pg_upgrade
    pg_upgrade命令的升级方式,它是一种快速升级的方法,通过创建新的系统表并使用旧的用户表的方式进行升级。它又分为两种方式:原地升级和非原地升级,原地升级需要指定–link参数。
  • 通过复制
    通过复制的方式是创建一个高版本的从库,等数据同步完后主变备,备变主,达到升级的目的。

我这边是以9.6.6升级到11.2 以下为操作流程。

整体思路

安装postgresql9.6.6

1、安装编译依赖

1
2
yum install -y gcc.x86_64 glibc.x86_64 glibc-devel.x86_64 vim-enhanced.x86_64 gcc-java apr apr-devel openssl openssl-devel libgcc.x86_64 java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 perl-Module-Install.noarch
yum install -y readline-devel.x86_64

2、创建postgres账户

1
2
groupadd postgres
useradd -g postgres postgres

创建postgres账户

3、解压并编译安装(将源码已经放到/tmp目录下)

1
2
3
4
5
6
7
8
9
10
11
[root@nfs ~]# cd /tmp/
[root@nfs tmp]# tar -zxf postgresql-9.6.6.tar.gz
c[root@nfs tmp]# cd postgresql-9.6.6
[root@nfs postgresql-9.6.6]# ./configure --prefix=/home/postgres
...略过编译过程...
[root@nfs postgresql-9.6.6]# make
...略过编译过程...
[root@nfs postgresql-9.6.6]# make install
[root@nfs postgresql-9.6.6]# cd contrib
[root@nfs postgresql-9.6.6]# make
[root@nfs postgresql-9.6.6]# make install

解压并编译安装

4、把程序目录全部赋权给postgres用户

1
chown -R postgres.postgres /home/postgres/

5、配置环境变量,主要是posgresql用户下的.bashrc文件中配置 PGDATA变量

1
2
3
4
5
6
7
8
9
[postgres@nfs ~]$ vim .bashrc
[postgres@nfs ~]$ mkdir -p {data,xlog_archive}
[postgres@nfs ~]$ chmod 0700 data
[postgres@nfs ~]$ source .bashrc
[postgres@nfs ~]$ pg
pg_archivecleanup pgbench pg_ctl pg_isready pgrep pg_rewind pg_test_timing
pgawk pg_config pg_dump pg_receivexlog pg_resetxlog pg_standby pg_upgrade
pg_basebackup pg_controldata pg_dumpall pg_recvlogical pg_restore pg_test_fsync pg_xlogdump
[postgres@nfs ~]$ pg

配置环境变量

.bashrc的文件内容

1
2
3
4
5
6
7
8
9
10
11
12
# .bashrc
PGHOME=/home/postgres
export PGHOME
PGDATA=$PGHOME/data
export PGDATA
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin
export PATH

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

6、初始化数据库

1
[postgres@nfs ~]$ initdb -D $PGDATA

备注:“针对目录可以自己的.bashrc中自己配置,这边我是安装到home/postgres目录下了”

7、创建相关日志目录并配置允许其它主机连接

7.1创建相关目录

1
2
3
4
5
6
7
8
mkdir /var/log/pgsql
chown -R postgres:postgres /var/log/pgsql/
mkdir /var/run/pgsql
chown -R postgres:postgres /var/run/pgsql
mkdir -p /var/log/pg_log
chown postgres:postgres /var/log/pg_log/
chmod 700 /var/log/pg_log/
mkdir -p /var/lib/pgsql/tmp

7.2编辑postgresql.conf文件

1
2
3
4
listen_addresses = '*'
archive_command = 'cp %p /home/postgres/xlog_archive/%f'
logging_collector = on
log_directory = '/var/log/pg_log'

其它配置可以根据系统配置来修改

7.3编辑pg_hba.conf文件
我这边内网是10.10网段的所以我添加以下内容到pg_hba.conf文件中

1
host    all             all             10.10.0.0/16            trust

创建相关日志目录并配置允许其它主机连接

8、启动postgresql数据库

1
pg_ctl start -D $PGDATA

出现下图表示服务启动正常
启动postgresql数据库

9、更改postgres密码

1
2
3
4
5
6
7
[postgres@nfs data]$ psql -U postgres
psql (9.6.6)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'postgres';
ALTER ROLE
postgres=# \q

使用pg_upgrade升级pgsql版本

下载postgresql11.2源码包,解压安装到新的目录

1
2
3
4
5
6
7
8
9
10
11
12
13
wget https://ftp.postgresql.org/pub/source/v11.2/postgresql-11.2.tar.gz
mkdir /pgsql11
mkdir /pgdata11
tar -zxf postgresql-11.2.tar.gz
cd postgresql-11.2
./configure --prefix=/pgsql11
make
make install
cd contrib
make
make install
chown -R postgres:postgres /pgsql11
chown -R postgres:postgres /pgdata11

切换到postgres用户下使用新版本初始化一个新的数据库

1
2
3
[root@nfs ~]# su - postgres
Last login: Wed Feb 20 19:25:29 CST 2019 on pts/0
[postgres@nfs ~]$ /pgsql11/bin/initdb /pgdata11/

初始化新库

配置pgsql11的pg_hba.conf,保证pg_upgrade可以连接新旧俩个库

与上面的7.3配置一致即可

停止pgsql9.6数据库

1
2
3
4
[postgres@nfs pgdata11]$ pg_ctl stop -D $PGDATA
waiting for server to shut down.... done
server stopped
[postgres@nfs pgdata11]$

使用pg_upgrade执行升级

1
/pgsql11/bin/pg_upgrade -d $PGDATA -D /pgdata11/ -b $PGHOME/bin -B /pgsql11/bin/

描述:介绍下使用的参数-b指定旧版本软件的bin目录-B指定新版本软件的bin目录,-d指定旧版本对应的数据目录,-D指定新版本对应的数据目录。
-k 硬连接 -c 测试

启动新版本的数据库

1
2
3
[postgres@nfs pgdata11]$ /pgsql11/bin/pg_ctl start -D /pgdata11/ -l logfile
waiting for server to start.... done
server started

检查数据库是否升级成功

1
psql -U postgres

检查数据库是否升级成功

收尾工作

1、恢复配置文件如pg_hba.conf、postgresql.conf和.bashrc等相关的配置文件
2、收集统计信息

1
./analyze_new_cluster.sh

3、删除老的数据库

1
./delete_old_cluster.sh

备注analyze_new_cluster.sh 和delete_old_cluster.sh 是执行pg_upgrade升级后自动生产的。

以上

到这里pg升级就已经完成了,希望这篇文章对你能有所帮助。

End!

支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫