postgresql数据库升级
pg_upgrade官网介绍:https://www.postgresql.org/docs/10/pgupgrade.html
1.查看老版本数据库编译参数值并记录
select name,setting,unit from pg_catalog.pg_settings where context='internal'
或者在postgres用户下执行如下命令
$ pg_config
重点关注一下四个参数,block_size,segment_size,wal_block_size,wal_segment_size
2.上传新版本PG源码并安装(本例使用PG12演示)
# tar vxf postgresql-12beta1.tar.gz
# cd postgresql-12beta1
# ./configure --prefix=/usr/local/pgsql-12.0 --with-wal-blocksize=8 --with-segsize=1 --with-blocksize=8
# make -j 10
# make install
# export PATH=$PATH:/usr/local/pgsql-12.0/bin
# cd contrib
# make all
# make install
注意,在编译的时候,一定要保证参数的值和旧版本数据库的值相同,否则后续无法升级
3.初始化新版本数据库
新版本数据库和旧版本数据库的PGDATA必须在同一个文件系统(目录)内才可以使用--link(硬链接)
$ cd /usr/local/pgsql-12.0/bin/
$ ./initdb --wal-segsize=16 -D /pgdata01/data/
pg12中编译时没有wal_segment_size参数,可以在初始化时指定
4.检查是否可以升级
$ cd /tmp
$ mkdir upgrade_log
$ cd upgrade_log
# 使用link硬链接方式的检查
$ /usr/local/pgsql-12.0/bin/pg_upgrade -c -- link -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data
# 使用copy方式的检查
$ /usr/local/pgsql-12.0/bin/pg_upgrade -c -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data
5.检查失败,解决失败问题,检查成功,可以跳过本步骤
本例检查失败,因为旧版本数据库安装了一个插件
可以卸载插件或者在新版本数据库上面安装插件
卸载插件:
psql
drop extension pg_proctab;
\c db01
drop extension pg_proctab;
\c db02
drop extension pg_proctab;
\c db03
drop extension pg_proctab;
因为postgres,db01,db02,db03,db04数据库都安装有插件,因此都卸载掉
新版本数据库安装插件
上傳插件
# unzip pg_proctab-0.0.7.zip
# cd pg_proctab-0.0.7
# export PATH=$PATH:/usr/local/pgsql-12.0/bin/
# make
# make install
安装完毕后,再次检查,看是否通过
其他异常请根据检查提示解决
6.开始升级
关闭旧版本数据库
升级有一下两种方式:
copy方式升级
$ /usr/local/pgsql-12.0/bin/pg_upgrade -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data
优点:
copy方式是在旧版本数据库表空间同目录下新建一个新版本数据库的目录并将数据文件复制过来,因此在数据库升级后,如果新旧版本数据库的端口号不一样的话,可以同时开启
缺点:
对于大数据量数据库需要的升级时间较长,且旧版本数据库数据文件所在目录剩余容量至少和现有使用量相同,占据空间
link方式升级
$ /usr/local/pgsql-12.0/bin/pg_upgrade --link -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data
优点:
link方式是在旧版本数据库表空间目录下新建一个目录,并在里面新建一个硬链接直接指向旧版本数据库的数据文件,升级迅速且不占用空间
缺点:
因为旧版本数据库和新版本数据库由于硬链接,因此使用的实际是同一个文件,因此无法同时开启新旧版本数据库
查看是否是硬链接可以进入新版本数据库数据文件所在目录执行ll命令
$ cd /data/tbs/PG_10_201707211/16384
$ ll
结果:
-rw-------. 2 postgres postgres 32768 Jun 26 09:09 16391
-rw-------. 2 postgres postgres 0 Jun 26 09:01 16394
从结果里面可以看到,每一个数据文件2个目录指向它,硬链接
7.修改环境变量
# su - postgres
$ vi .bash_profile export PGHOME=/usr/local/pgsql
export PGDATA=/pgdata01/data
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib
export PATH=$PATH:$PGHOME/bin
8.修改postgresql.conf和pg_hba.conf文件
9.创建扩展
10.扫尾等
postgresql数据库升级的更多相关文章
- PostgreSQL 数据库升级
PostgreSQL软件版本升级后,需要使用pg_upgrade迁移旧版本的数据库,具体的操作参数可以参考官方文档,在此记录一下操作过程中出现的细节问题: 新版本软件在initdb的时候要保证loca ...
- postgresql数据库的数据导出
一.pg_dump的用法:数据库的导入导出是最常用的功能之一,每种数据库都提供有这方面的工具,例如Oracle的exp/imp,Informix的dbexp/dbimp,MySQL的mysqldump ...
- 关于PDF.NET开发框架对Mysql Sqlite PostgreSQL数据库分页支持的个人看法
关于PDF.NET开发框架的名字由来 在设计www.pwmis.com站点的时候,考虑到架构的兼容性和将来升级的可能性,最重要的是没有足够的时间去为网站添加和维护很多复杂的程序,所以在借鉴前人成功经 ...
- MetaSploit攻击实例讲解------终端下PostgreSQL数据库的使用(包括kali linux 2016.2(rolling) 和 BT5)
不多说,直接上干货! 配置msf连接postgresql数据库 我这里是使用kali linux 2016.2(rolling) 用过的博友们都知道,已经预安装好了PostgreSQL. 1. p ...
- PostgreSQL数据库安装
PostgreSQL数据库安装 postgresqllinux9.6.0 2018年01月31日 10时53分13秒 编译以及安装 源码编译 程序安装 数据库的启动和停止 启动数据库 关闭数据库 数据 ...
- PostgreSQL 数据库备份与还原
PostgreSQL 数据库备份与还原 目录 备份 还原 栗子 备份 PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以 ...
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- Oracle数据库升级(10.2.0.4->11.2.0.4)
环境: RHEL5.4 + Oracle 10.2.0.4 目的: 在本机将数据库升级到11.2.0.4 之前总结的Oracle数据库异机升级:http://www.cnblogs.com/jyzha ...
- PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库
最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...
随机推荐
- jmeter跨线程使用token
项目的接口测试,今早所有接口都不通了,查看原因是登录接口地址变了..... 原来的方式是每个线程中都写了登陆接口来获取token,但是因为登陆接口地址改变的原因,要改好多个登陆接口,所以就想把toke ...
- Spring Boot 日志各种使用姿势,是时候捋清楚了!
@ 目录 1. Java 日志概览 1.1 总体概览 1.2 日志级别 1.3 综合对比 1.4 最佳实践 2. Spring Boot 日志实现 2.1 Spring Boot 日志配置 2.2 L ...
- MySQL中的 ”SELECT FOR UPDATE“ 一次实践
背景 最近工作中遇到一个问题,两个不同的线程会对数据库里的一条数据做修改,如果不加锁的话,会得到错误的结果. 就用了MySQL中for update 这种方式来实现 本文主要测试主键.唯一索引和普通索 ...
- 嵌入式开发笔记——调试组件SEGGER_HardFaultHandle
一.前言 在使用Cortex-M内核的MCU进行开发时,有时候会因为对内存错误访问等原因造成程序产生异常从而进入HardFaultHandler错误中断.如果程序结构比较复杂,尤其是运行了RTOS时可 ...
- 使用Attribute限制Action只接受Ajax请求
原博文 https://www.cnblogs.com/h82258652/p/3939365.html 代码 /// <summary> /// 仅允许Ajax操作 /// </s ...
- 深入理解MySQL系列之锁
按锁思想分类 悲观锁 优点:适合在写多读少的并发环境中使用,虽然无法维持非常高的性能,但是在乐观锁无法提更好的性能前提下,可以做到数据的安全性 缺点:加锁会增加系统开销,虽然能保证数据的安全,但数据处 ...
- Centos7 根目录存储空间扩展方法
Centos7 根目录存储空间扩展方法 一.首先通过 df -hl 命令查看磁盘占用情况,其中根目录已经被占满,此时需要对其进行扩容 二.针对虚拟机环境的centos7系统根存储空间扩容,可利 ...
- 166个最常用的Linux命令,哪些你还不知道?
linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心. 线上查 ...
- Unity Package Manager
(注:Unity 2018.1及以后的版本才可以使用Package Manager.) 一个package是一个容器,里面放的是Assets, Shaders, Textures, plug-ins, ...
- 使用 SOS 对 Linux 中运行的 .NET Core 进行问题诊断
目录 说明 准备一个方便的学习环境 2.x 配置内容 3.x 配置内容 工具介绍 lldb sos plugin 1. attach 到进程上进行调试 2. 分析core dump文件 SOS 案例分 ...