从旧服务器恢复原始 PostgreSQL 备份?
Restoring a raw PostgreSQL backup from an ancient server?
我能找到的所有指南都表明迁移 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 位 PostgreSQL 数据目录的说法是正确的。 9.3 也无法读取 9.1 数据目录。
您需要 32 位 PostgreSQL 9.1 才能访问它。
因为您的 x86_64 CPU 可以 运行 32 位二进制文件而无需仿真,您有几个选择:
直接在当前系统上使用 Debian/Ubuntu 包安装 32 位 PostgreSQL 9.1,引入任何所需的 32 位库。我可能会先尝试这个,因为它可能是最简单的。检查 http://apt.postgresql.org/ 以查看您的 OS.
是否有 32 位 9.1 二进制文件
否则,启动虚拟机 运行使用 libvirt+kvm、Vagrant+virtualbox 或其他任何方式在原始操作系统上创建数据目录,然后安装 PostgreSQL 9.1原来的OS包就可以了。
作为最后的选择,您可以安装 32 位 gcc 和相关的 PostgreSQL 依赖项(apt-get build-essential:i386
,apt-get build-dep postgresql:i386
我认为,但我没有 Debian/Ubuntu 机器进行测试)然后使用该工具链为 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
它 - 如果可能,使用 new pg_dump
来自 9.3。我强烈 推荐使用pg_dumpall --globals-only
,然后pg_dump -Fc
用于您希望转储的每个单独的数据库。
现在去检查你的备份,确保你将来会定期转储。
我能找到的所有指南都表明迁移 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 位 PostgreSQL 数据目录的说法是正确的。 9.3 也无法读取 9.1 数据目录。
您需要 32 位 PostgreSQL 9.1 才能访问它。
因为您的 x86_64 CPU 可以 运行 32 位二进制文件而无需仿真,您有几个选择:
直接在当前系统上使用 Debian/Ubuntu 包安装 32 位 PostgreSQL 9.1,引入任何所需的 32 位库。我可能会先尝试这个,因为它可能是最简单的。检查 http://apt.postgresql.org/ 以查看您的 OS.
是否有 32 位 9.1 二进制文件
否则,启动虚拟机 运行使用 libvirt+kvm、Vagrant+virtualbox 或其他任何方式在原始操作系统上创建数据目录,然后安装 PostgreSQL 9.1原来的OS包就可以了。
作为最后的选择,您可以安装 32 位 gcc 和相关的 PostgreSQL 依赖项(
apt-get build-essential:i386
,apt-get build-dep postgresql:i386
我认为,但我没有 Debian/Ubuntu 机器进行测试)然后使用该工具链为 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
它 - 如果可能,使用 new pg_dump
来自 9.3。我强烈 推荐使用pg_dumpall --globals-only
,然后pg_dump -Fc
用于您希望转储的每个单独的数据库。
现在去检查你的备份,确保你将来会定期转储。