博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 大版本升级方法之一 - 不落地并行导出导入
阅读量:7114 次
发布时间:2019-06-28

本文共 2388 字,大约阅读时间需要 7 分钟。

标签

PostgreSQL , 大版本升级 , rds_dbsync , pg_dump , pg_restore


背景

尽量快的大版本升级的方法。

一、9.4以下版本,使用pg_dump并行导出,pg_restore并行导入,迁移

(导出使用源版本pg_dump,导入使用目标版本pg_restore。如果是ppas请使用enterprisedb对应版本。)

1、(源库)全局元数据(用户、表空间)导出

需要superuser权限(如果你没有这个权限,跳过此步,但是务必在执行下一步时,人为在目标实例中创建所有与对象权限相关的用户)。

pg_dumpall -g -h IP地址 -p 端口 -U 用户 -W -l 数据库名

2、(目标库)全局元数据导入

导入以上元数据,在目标库执行即可(通常包括创建用户,修改用户密码,创建表空间等。)

执行第2步的目的是保证导入时,执行grant, alter set owner等操作时,目标用户已存在,否则缺失用户会导致pg_restore报错。

3、(目标库)建库

postgres=# create database newdb;  CREATE DATABASE

4、(目标库)插件

安装postgresql软件时,打包源库已使用的的插件。    略

5、(源库)导出

mkdir /data01/pg/backup  pg_dump -j 32 -f /data01/pg/backup -F d -h IP地址 -p 端口 -U 用户 -W newdb

6、(目标实例)关闭autovacuum,加速导入(可选)

使用超级用户执行SQL    alter system set autovacuum=off;  select pg_reload_conf();

7、(目标库)导入

pg_restore -d newdb -F d -j 32 -h IP地址 -p 端口 -U 用户 /data01/pg/backup

8、(目标实例)开启autovacuum(如果执行了6)

使用超级用户执行SQL    alter system set autovacuum=on;  select pg_reload_conf();

9、(目标实例)收集统计信息(如果执行了6)

使用超级用户执行SQL,收集统计信息  \c newdb 超级用户  analyze;

使用以上方法,60GB的数据库迁移,耗时约10分钟。

多机玩法

Where this gets interesting is with multiple hosts. You can:$ # dump a remote database to your local machine$ pg_dump -h remotedb.mydomain.com -f /home/postgres/dump.sql test $ # dump a local database and write to a remote machine$ pg_dump -h remotedb.mydomain.com test | ssh postgres@remotedb.mydomain.com 'cat > dump.sql' $ # dump a remote database and write to the same remote machine$ pg_dump -h remotedb.mydomain.com test | ssh postgres@remotedb.mydomain.com 'cat > dump.sql' $ # or a different remote machine$ pg_dump -h remotedb1.mydomain.com test | ssh postgres@remotedb2.mydomain.com 'cat > dump.sql' You also have similar restore options. I will use psql below but pg_restore works the same:$ # dump a remote database and restore to your local machine$ pg_dump -h remotedb.mydomain.com test1 | psql test2 $ # dump a local database and restore to a remote machine$ pg_dump -h remotedb.mydomain.com test | ssh postgres@remotedb.mydomain.com 'psql test' $ # dump a remote database and restore to the same remote machine$ pg_dump -h remotedb.mydomain.com test1 | ssh postgres@remotedb.mydomain.com 'psql test2' $ # or a different remote machine$ pg_dump -h remotedb1.mydomain.com test | ssh postgres@remotedb2.mydomain.com 'psql test'

二、9.4及以上版本,使用rds_dbsync不落地并行迁移

三、9.4及以上版本,使用pg_logical,增量迁移

四、10及以上版本,使用逻辑订阅,增量迁移

五、任何版本,都可以使用pg_upgrade升级

详见

转载地址:http://vamhl.baihongyu.com/

你可能感兴趣的文章
HTML文档中嵌入CSS的几种方法
查看>>
修改Firebug字体
查看>>
Socket get http request
查看>>
cocos creator 底部按钮touch延迟
查看>>
caffe配置
查看>>
你有学习者综合征吗?Web 开发是重灾区
查看>>
CF1043
查看>>
《R语言实战》读书笔记-- 第六章 基本图形
查看>>
#Sublime Text && Markdown 设置
查看>>
HCIA-Storage:第三章ICT架构体系
查看>>
Bean之间的关系
查看>>
2019.4.29 区块链论文翻译
查看>>
2、工厂方法模式
查看>>
我的XML学习笔记
查看>>
confluence和jira重启动后confluence启动报错,打不开网页
查看>>
Web设计者和开发者必备的27个Chrome插件
查看>>
第四周-学习进度条
查看>>
用PHP山寨一款软件
查看>>
BZOJ2212:[POI2011]Tree Rotations(线段树合并)
查看>>
Centos7下用FastDFS搭建图片服务器
查看>>