Postgresql 大小版本升级
文章结构如下:
Postgresql是一个非常活跃的社区开源项目,更新速度很快,每一次版本的更新都会积极的修复旧版本的BUG,性能上也会有不同幅度的提升。10之前的版本由三部分组成,10开始只有两部分数字组成。
1. 小版本升级
Postgresql每次的小版本升级不会改变内部的存储格式,也不会改变数据目录,并且总是向上兼容同一主版本,9.6.2与9.6.1总是兼容的。升级小版本只需要安装新的可执行文件,并且重启数据库实例。
① 备份
可以进行数据库备份pg_dump备份
② 关闭数据库服务器
pg_ctl stop -D /pgsql/pg_data/
cd /usr/local/
mv pgsql/ pgsqlbak
把postgresql10.8 上传到目录/usr/local/src并解压
mkdir -p /usr/local/pgsql
cd /usr/local/src/postgresql-10.8
./configure --with-ossp-uuid --prefix=/usr/local/pgsql
gmake world
gmake install-world
③ 安装完后,直接启动数据库
pg_ctl start -D /pgsql/pg_data/
启动后,数据查询成功。
2. 大版本升级
大版本可以用pg_dumpall 和pg_upgrade进行升级,主要是将pg_upgrade升级。
pg_upgrade(以前称为pg_migrator)允许将存储在PostgreSQL数据文件中的数据升级到更高版本的PostgreSQL主版本,而不需要主要版本升级所需的数据转储/重载,例如从8.4.7升级到PostgreSQL的当前主要版本。次要版本升级不需要,例如从9.0.1到9.0.4。
主要的PostgreSQL版本会定期添加新功能,这些功能通常会改变系统表的布局,但内部数据存储格式很少会发生变化。pg_upgrade通过创建新的系统表并简单地重用旧的用户数据文件来使用此事实来执行快速升级。如果未来的主要版本以一种使旧数据格式不可读的方式更改数据存储格式,则pg_upgrade将无法用于此类升级。(社区将试图避免这种情况。)
pg_upgrade尽力确保旧的和新的集群是二进制兼容的,例如通过检查兼容的编译时设置,包括32/64位二进制文件。重要的是,任何外部模块也是二进制兼容的,尽管pg_upgrade无法检查。
pg_upgrade支持从8.4.X及更高版本升级到PostgreSQL的当前主要版本。
有一些外部扩展要求在升级之前先升级旧版本的外部扩展,例如GIS。
一.使用upgrade 普通模式升级
1) 安装新版的PG并初始化数据目录
把新版本的包上传到/usr/local/src目录 root 执行以下命令
mkdir -p /usr/local/pgsql10
cd /usr/local/src/
tar -zxvf postgresql-10.8.tar.gz
./configure --with-ossp-uuid --prefix=/usr/local/pgsql10
gmake world
gmake install-world
mkdir -p /pgsql/pg_data10
mkdir -p /pgsql/pg_archive10
mkdir -p /pgsql/pg_log10
chown -R postgres:postgres /pgsql/pg_data10
su - postgres
export PGHOME=/usr/local/pgsql10
export PGDATA=/pgsql/pg_data10
初始化后不能启动新的库。
/usr/local/pgsql10/bin/initdb -D $PGDATA -E UTF-8 --locale=C -U postgres -W
查看安装的目录:
2) 停止旧版本的数据库
pg_ctl stop -D /pgsql/pg_data/ -m fast
3) 检查兼容性
为了避免数据库升级失败造成的长时间宕机,升级之前都做兼容性检查。
检查语句:
/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin/ -B /usr/local/pgsql10/bin/ -d /pgsql/pg_data/ -D /pgsql/pg_data10/ -k -c
可以查看已经通过兼容性测试。
值得注意的是pg10跟之前的版本hash 索引结构不一样,升级之后需要重建hash索引。
4) 使用PG_UPGRADE普通模式升级
/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin/ -B /usr/local/pgsql10/bin/ -d /pgsql/pg_data -D /pgsql/pg_data10/
图片中提示,如果升级失败,必须重新初始化新的数据库才能够继续进行升级,本次实验中升级成功。
修改postgresql.conf,pg_hba.conf 参数
开启后,检查数据库是否正常运行以及有无报错。
二.使用upgrade link模式升级
同样的也是前期准备工作一样,初始化数据库:
把新版本的包上传到/usr/local/src目录 root 执行以下命令
mkdir -p /usr/local/pgsql10
cd /usr/local/src/
tar -zxvf postgresql-10.8.tar.gz
./configure --with-ossp-uuid --prefix=/usr/local/pgsql10
gmake world
gmake install-world
mkdir -p /pgsql/pg_data10
mkdir -p /pgsql/pg_archive10
mkdir -p /pgsql/pg_log10
chown -R postgres:postgres /pgsql/pg_data10
su - postgres
export PGHOME=/usr/local/pgsql10
export PGDATA=/pgsql/pg_data10
/usr/local/pgsql10/bin/initdb -D $PGDATA -E UTF-8 --locale=C -U postgres -W
初始化后不能启动新的库。
1) 了解旧版本有那些extension以及表空间
2) 检查兼容性
检查语句:
/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin/ -B /usr/local/pgsql10/bin/ -d /pgsql/pg_data/ -D /pgsql/pg_data10/ -k -c
3) 使用PG_UPGRADE link模式升级
如果使用了hash 索引,需要重建索引升级完成后(升级的过程中,索引会变为不可用)
关闭旧的数据库:
/usr/local/pgsql/bin/pg_ctl stop -D /pgsql/pg_data -m fast
/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin -B /usr/local/pgsql10/bin -d /pgsql/pg_data/ -D /pgsql/pg_data10/ -k
其中提示,如果想用旧版本,需要把/pgsql/pg_data/global/pg_control.old命名为/pgsql/pg_data/global/pg_control
例如测试:
mv /pgsql/pg_data/global/pg_control.old /pgsql/pg_data/global/pg_control
/usr/local/pgsql/bin/pg_ctl start -D /pgsql/pg_data
还是可以启动使用以前的数据库。
由于本次是使用新的版本:
mv /pgsql/pg_data/global/pg_control /pgsql/pg_data/global/pg_control.old
启动新的实例。(新的实例端口为5433)
pg_ctl start -D /pgsql/pg_data10/
手动收集统计信息:
/usr/local/pgsql10/bin/vacuumdb -a --analyze-in-stages -h127.0.0.1 -p5433
9版本新的库升级成功,并且开启后,旧的仍然能够通过修改pg_control.old后启动。
貌似10的旧版本
原文地址:https://www.cnblogs.com/hmwh/p/11372649.html
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- CentOS7 SkyWalking APM8.1.0 搭建与项目集成使用
- CentOS7 cassandra安装与测试
- Centos7 搭建DNS服务器
- CentOS7 fastdfs安装与测试
- CentOS7 jdk安装
- CentOS7 kafka安装
- Centos7 keepalived安装并监控mysql实现自动切换
- Centos7 mqtt集群安装
- CentOS7 mysql5.7安装并配置主主同步
- CentOS7 nginx安装并负载mysql
- CentOS7 zabbix安装并实现其它服务器服务监控报警与自动恢复
- CentOS7 Zookeeper安装
- 【STM32F429开发板用户手册】第38章 STM32F429的FMC总线应用之是32路高速IO扩展
- 【STM32F429开发板用户手册】第39章 STM32F429的FMC总线应用之SDRAM
- react项目搭建