如何轻松迁移PostgreSQL服务器,以最少的停机时间

如何轻松迁移PostgreSQL服务器与最小停机时间

PostgreSQL是一个很好的数据库服务器,但是当您的数据集相当大时,使用pg_dump迁移服务器可能是一个相当长的过程。 在本教程中,我们将讨论一种尽可能少的停机时间迁移整个服务器的方法。 为了实现这一点,我们将使用PostgreSQL内置的PITR功能(即时恢复)。

假设

本教程假定您有2台基于Debian / Ubuntu的Linux发行版上运行的PostgreSQL 8.3服务器。 数据库版本需要相同。 您不能将其从8.3迁移到8.4。

目的地PostgreSQL服务器的数据目录将丢失!

预制

Preperation是关键,特别是为了避免尽可能多的停机时间。 因此,在继续运行任何命令之前,请阅读本教程。 如果你不完全明白命令应该做什么, 不要运行它 可以销毁您当前的PostgreSQL数据库。 总是有备份!

第一步:配置源Postgresql服务器

继续之前:确保目的地的PostgreSQL服务器未运行!

第一步是准备源数据库服务器。 如前所述,我们将使用PITR(Point In Time Recovery)。 这将创建将被复制到目标数据库服务器的WAL文件。 每个WAL文件(默认情况下)大小为16MB。 如果您的数据库经常更新,这可能会增加磁盘空间。 记住这一点。

我们需要在源服务器上设置PITR归档。 登录到源服务器并创建归档目录。 替换/存档您想要的目录。

mkdir /archive; chown postgres.postgres /archive;

接下来,编辑文件/etc/postgresql/8.3/main/postgresql.conf

vim /etc/postgresql/8.3/main/postgresql.conf

添加以下行:

archive_mode = on # for pgpoolII
archive_command = 'cp -i %p /archive%f 

接下来,运行以下命令在备份模式下启动postgres。

# sudo /etc/init.d/postgresql-8.3 reload; 
# sudo su postgres;
# psql;
postgres=# SELECT pg_start_backup('backup');
postgres=# \q

如果您在备份命令后收到错误; 在继续之前修复这个问题!

接下来,将/var/lib/postgresql/8.3/main中的文件复制到目标服务器。 我喜欢用这个rsync。

rsync --progress -azv --delete /var/lib/postgresql/8.3/main/ root@<destinationserver>:/var/lib/postgresql/8.3/main

完成后,我们需要停止postgresql的备份模式;

# sudo su postgres; 
# psql;
postgres=# SELECT pg_stop_backup();
postgres=# \q

目的服务器

现在我们需要配置目标服务器。 首先,创建另一个存档目录。 再次,替换/存档/为您所需的目录。 为了方便起见,我建议保持这些目录是一样的。

# sudo mkdir /archive; sudo chown postgres.postgres /archive;
# sudo apt-get install postgresql-contrib-8.3
# sudo vim /var/lib/postgresql/8.3/main/recovery.conf

将以下行粘贴到新创建的文件中:

restore_command = '/usr/lib/postgresql/8.3/bin/pg_standby -l -d -s 2 -t /tmp/pgsql.trigger /archive %f %p %r 2>>standby.log'

接下来,我们将需要rsync / archive目录。 这可以从目标或源服务器完成。 以下假定目标服务器:

# sudo rsync --progress -azv --delete root@<sourceserver>:/archive /archive

完成后,启动postgresql ..

# sudo /etc/init.d/postgresql-8.3 start

当您要切换时,您只需要重新同步/ archive目录并创建一个触发器文件即可将postgresql启动到正常模式。 请注意,从创建触发文件的那一刻起,源服务器的新数据将不会添加到目标服务器。

# sudo rsync --progress -azv --delete root@<sourceserver>:/archive /archive 
# sudo su -c 'touch /tmp/pgsql.trigger' postgres

站起来,放松身心,做好工作

假设一切顺利,新的服务器现在已经开始运行,直到创建了触发器文件。 现在你可以退一步,享受一份好工作。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏