我的生产服务器(ubuntu 13.10)与PostgreSQL 9.1一起运行。
我想使用9.3的一些功能,因此想要升级。
有人可以帮助我从9.1升级到9.3,以使停机时间不超过30分钟。或者?
主要问题是防止数据丢失或文件冗余。
我的生产服务器(ubuntu 13.10)与PostgreSQL 9.1一起运行。
我想使用9.3的一些功能,因此想要升级。
有人可以帮助我从9.1升级到9.3,以使停机时间不超过30分钟。或者?
主要问题是防止数据丢失或文件冗余。
Answers:
从不同的主要版本(例如9.1到9.3)升级PostgreSQL基本上有三种方法。
第一个建议(如果可能的话)是使用较新的(9.3)版本的二进制文件对旧(9.1)版本进行转储,并将其还原到由较新版本创建的新群集上。
通常,这种方法较慢,但也是最可行的。使速度更快的一个技巧是使用并发。要转储并行作业,可以执行以下操作:
$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase
您必须为每个拥有的数据库执行此操作,将--jobs=4
值调整为任意值(测试2到核心数之间的某些值,并查看哪种速度更快)。此外,在此阶段,不应将任何人连接到数据库,任何修改都将导致转储损坏(由于使用了非安全选项--no-synchronized-snapshots
)。
之后,您可以使用以下命令将转储还原到新实例中pg_restore
:
$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump
之后,建议ANALYZE
在数据库上运行:
$ vacuumdb --analyze-only mydatabase
(如果你有足够的时间,只运行--analyze
还VACUUM
数据库和更新的知名度映射)
另一种选择是使用contribpg_upgrade
。使用该--link
方法,它提供了一种升级PostgreSQL的非常快速的方法。
在使用之前,您必须备份整个数据目录,因为在--link
模式下,如果出现问题,则可能会丢失这两个数据(新旧数据)。另外,请阅读整个文档,尤其是底部的注释(pg_upgrade有一些限制)。
更新:请--check
在运行权威命令之前使用该选项。另外,对于大型数据库,建议在屏幕会话中运行此命令。
升级版本的另一种方法是使用基于触发器的复制工具。像Slony,Bucardo和Londiste。
此选项需要最少的停机时间,但这是最难处理的选项。
为此,您需要构建一个主从服务器,其中主服务器是当前版本(9.1),而从服务器是新版本(9.3)。然后,您等待第一次同步(系统仍处于生产状态),然后关闭所有连接到数据库的用户(停机从此处开始),等待从属服务器追赶,将其升级为主服务器,然后将其升级为主服务器。将所有客户端/应用程序重定向到此新版本。这样就完成了。
Slony文档提供了使用Slony升级PostgreSQL的分步指南。
好吧,一如既往,恢复:
希望我能帮上忙。祝好运。
pg_dumpall
转储所有数据库。
请按照以下步骤将postgres 9.1升级到9.3:
首先为ubuntu创建一个/etc/apt/sources.list.d/pgdg.list文件,其中包含以下内容:
deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main
添加以下运行的密钥:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
使用postgres安装开发人员工具:
sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
为了确认我们的安装,我们将输入“ sudo pg_lsclusters”并查看我们运行的两个版本的PostgreSQL。
停止Postgressql服务:
sudo service postgresql stop
删除由9.3安装创建的默认9.3群集。
sudo pg_dropcluster --stop 9.3 main
从现有的9.1群集中创建一个新的9.3群集。
sudo pg_upgradecluster 9.1 main
确认新集群已加载并且我们正在运行PostgreSQL 9.3。
sudo service postgresql start 9.3
如果一切正常,请降至9.1群集。
pg_dropcluster --stop 9.1 main