AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 19593
Accepted
Josh
Josh
Asked: 2012-06-21 13:01:10 +0800 CST2012-06-21 13:01:10 +0800 CST 2012-06-21 13:01:10 +0800 CST

如何将数据库从 Postgres 8.4 复制到 Postgres 9.1?

  • 772

我的 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 安装并更新它们?

postgresql recovery
  • 2 2 个回答
  • 14464 Views

2 个回答

  • Voted
  1. Best Answer
    swasheck
    2012-06-21T14:05:41+08:002012-06-21T14:05:41+08:00

    尝试运行旧的 bin 文件时失败,因为它缺少依赖项。您将需要安装其依赖项,在新服务器上安装 8.4 以完成此任务,或者启动安装了 8.4 的 VM,将文件复制到 VM,执行在 VM 上启动 8.4 实例所需的操作(这意味着 postgres 需要知道默认数据目录在哪里)。从那里,我会对有pg_dump问题的数据库进行操作,然后将它们恢复到新服务器。那可能会给你最干净的环境。

    因此,这是我认为您的选择:

    使用 pg_upgrade

    在新服务器上 ( pg_upgrade)

    1. 安装 PostgreSQL 8.4依赖项并希望您复制的二进制文件能够正常工作。如果他们不这样做,那么您可能只需要删除这些复制的二进制文件并从 apt 安装 8.4。
    2. 尝试启动服务/tmp/postgres-bin.old/postgresql/8.4/bin/pg_ctl start -D /tmp/postgres.old/main/
    3. 如果可行,请停止服务/tmp/postgres-bin.old/postgresql/8.4/bin/pg_ctl stop -D /tmp/postgres.old/main/
    4. 现在试试你的 pg_upgrade 脚本

    不使用 pg_upgrade

    1. 创建 VM 或使用旧的、已停用的服务器并安装 postgresql 8.4
    2. initdb使用(或pg_createcluster)初始化您的服务器
    3. 将您的备份数据复制到刚刚创建的数据上
    4. 启动postgresql
    5. 使用备份数据pg_dump
    6. 将转储文件复制到“新服务器”
    7. 恢复到新服务器上的新数据库
    • 6
  2. Tobias
    2014-02-13T12:37:45+08:002014-02-13T12:37:45+08:00

    今天遇到了类似的问题。必须将两个数据库从 8.2.14 版本迁移到 9.3.2,并将操作系统从 Suse 切换到 Ubuntu。我尝试了几种方法,最后“最简单”的赢了。我pg_dump使用插入而不是副本创建了转储,并从转储文件创建了数据库:

    pg_dump 'database' -f 'filename' -C -D -U 'user' -W
    

    在将文件导入新系统之前,我检查了某些函数中使用的路径并更正了路径信息。据我所知,现在导入后它似乎工作正常。

    • 2

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve