我的 trac 服务器最近开始出现问题。它运行的是一个非常过时的 Ubuntu 版本,我无法正确使用它apt-get
来纠正我遇到的问题。因此,我备份了机器并全新安装了 Ubuntu 12.04。
现在我有一个正确安装并运行 Postgres 9.1 的新服务器。我想从备份中获取旧的 Postgres 8.4 数据库,并在新安装时进行设置。我该怎么做呢?
到目前为止,我所做的是将旧的 Postgres 8.4 数据和 bin 目录从备份 (/var/lib/postgresql/8.4/main
和/usr/lib/postgresql/8.4/bin
) 复制到/tmp/postgres.old
新/tmp/postgres-bin.old
安装中。我停止使用 Postgres 9.1service postgres stop
并运行以下命令:
sudo -u postgres /usr/lib/postgresql/9.1/bin/pg_upgrade \
--old-datadir=/tmp/postgres.old/main/ \
--new-datadir=/var/lib/postgresql/9.1/main/ \
--old-bindir=/tmp/postgres-bin.old/postgresql/8.4/bin \
--new-bindir=/usr/lib/postgresql/9.1/bin
如Postgres 文档中所述。这似乎很好用,除了我收到错误:
Performing Consistency Checks
-----------------------------
Checking current, bin, and data directories ok
Checking cluster versions ok
connection to database failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
unable to connect to old postmaster started with the command: "/tmp/postgres-bin.old/postgresql/8.4/bin/pg_ctl" -w -l "/dev/null" -D "/tmp/postgres.old/main" -o "-p 5432 -c autovacuum=off -c autovacuum_freeze_max_age=2000000000" start >> "/dev/null" 2>&1
Failure, exiting
问题似乎是它正在尝试启动旧服务器,但这不起作用,因为它太旧并且没有正确安装。尝试手动启动它会发现问题:
root@mission:/tmp# sudo -u postgres /tmp/postgres-bin.old/postgresql/8.4/bin/postgres
/tmp/postgres-bin.old/postgresql/8.4/bin/postgres: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory
那么,如何将旧的 Postgres 8.4 数据库恢复到新的 Postgres 9.1 安装并更新它们?
尝试运行旧的 bin 文件时失败,因为它缺少依赖项。您将需要安装其依赖项,在新服务器上安装 8.4 以完成此任务,或者启动安装了 8.4 的 VM,将文件复制到 VM,执行在 VM 上启动 8.4 实例所需的操作(这意味着 postgres 需要知道默认数据目录在哪里)。从那里,我会对有
pg_dump
问题的数据库进行操作,然后将它们恢复到新服务器。那可能会给你最干净的环境。因此,这是我认为您的选择:
使用 pg_upgrade
在新服务器上 (
pg_upgrade
)/tmp/postgres-bin.old/postgresql/8.4/bin/pg_ctl start -D /tmp/postgres.old/main/
/tmp/postgres-bin.old/postgresql/8.4/bin/pg_ctl stop -D /tmp/postgres.old/main/
不使用 pg_upgrade
initdb
使用(或pg_createcluster
)初始化您的服务器pg_dump
今天遇到了类似的问题。必须将两个数据库从 8.2.14 版本迁移到 9.3.2,并将操作系统从 Suse 切换到 Ubuntu。我尝试了几种方法,最后“最简单”的赢了。我
pg_dump
使用插入而不是副本创建了转储,并从转储文件创建了数据库:在将文件导入新系统之前,我检查了某些函数中使用的路径并更正了路径信息。据我所知,现在导入后它似乎工作正常。