从古代服务器恢复原始PostgreSQL备份



我能找到的所有指南都表明,迁移psql数据库真的很容易。只需在一端调用pg_dump,然后就可以在另一端吸收它。真的很简单如果你记得pg_dump

大约两年前,我将一台服务器从一台破旧的32位服务器迁移到了一台更新、新鲜的64位服务器上。我备份了要点(/etc/var,/home等),但当时我对它还很陌生,我完全忽略了PostgreSQL,没有在新服务器上恢复它。

听起来奇怪吗?好吧,客户只在Moodle网站上使用它,他们只在月球上使用一次,而且从来没有需要过它。今天是满月。客户对他们的数据库不可用感到愤怒。

我仍然保留了初始备份中的所有/var/lib/postgresql/9.1/...文件。我可以尝试替换新的/var/lib/postgresql/9.3/...文件,但这也是一个不同的拱形,我读过几篇文章,认为这行不通。我不希望事情变得更糟。

有没有一种好的方法可以恢复这个旧数据库,或者以某种方式将其转换为可以重新导入的中性明文SQL?

64位PostgreSQL无法读取32位PostgreQL数据目录,这是正确的。9.3也无法读取9.1数据目录。

您需要32位PostgreSQL 9.1才能访问此。

因为您的x86_64 CPU可以在没有模拟的情况下运行32位二进制文件,所以您有两个选项:

  • 使用Debian/Uubuntu包直接在当前系统上安装32位PostgreSQL 9.1,引入任何所需的32位库。我可能会先试试这个,因为它可能是最简单的。检查http://apt.postgresql.org/查看您的操作系统是否有32位9.1二进制文件。

  • 如果做不到这一点,请启动一台运行原始操作系统的虚拟机,使用libvirt+kvm、Vagrant+virtualbox或其他软件创建数据目录,然后从其上的原始操作系统包安装PostgreSQL 9.1。

  • 作为最后一种选择,你可以安装一个32位的gcc和相关的PostgreSQL依赖项(我想是apt-get build-essential:i386apt-get build-dep postgresql:i386,但我没有Debian/Uubuntu机器可以测试),然后使用该工具链为i386编译PostgreSQL 9.1。

无论采用哪种方式,您都希望使用9.1二进制文件到PATH=/path/to/9.1/bin pg_ctl -D /path/to/copy/of/database -w start PostgreSQL,然后使用pg_dump-如果可能,请使用9.3中的pg_dump。我强烈建议使用pg_dumpall --globals-only,然后为每个要转储的数据库使用pg_dump -Fc

现在去检查你的备份,并确保将来你会定期转储。

最新更新