如何升级 Cloudera Manager Postgres 数据库

How to upgrade Cloudera Manager Postgres database

我在 Ubuntu 12.04 上安装了带有嵌入式 postgres 数据库的 Cloudera Manager 5.9。我使用 do-release-upgrade 将 Ubuntu 升级到 14.04。在此过程中,Postgres 也从 8.4 升级到了 9.3。现在,当我尝试通过以下方式启动 CM 数据库时:

# sudo service cloudera-scm-server-db start

我在 CM db.log 中收到以下错误:

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 8.4, which is not compatible with this version 9.3.15.

我该如何克服这个问题?我看过很多关于通过 pg_dump 转储 postgres 数据库并通过 psql 恢复的文档,但我不知道这在 cloudera 管理器的上下文中如何应用,尤其是当数据库没有出现时。

在 Ubuntu 12.04 一切正常时,我相信转储可以像这样进行:

#pg_dump -h localhost -p 7432 -U scm > /tmp/scm_server_db_backup.$(date +%Y%m%d)

我可以尝试创建一个空数据库并使用 psql 将转储恢复到这个数据库。但是如何配置cdh指向这个数据库呢?

按照您的建议,您需要找到一种方法将 8.4 数据文件 "convert" 转换为 9.3 数据文件。 使用 pg_dump 需要一个可用的 PostgreSQL 8.4 实例。所以,基本上你需要一个工作的 Postgresql 8.4(想想 VM 或 Docker),然后将你现有的 8.4 字段复制到那个 VM/Docker,VM/Docker 提供一个纯文本转储 [plain SQL,因此与任何版本兼容),将纯文本转储恢复到您的 9.3 实例)。

你可以试试:

  • 使用 Postgresql 8.4
    创建虚拟机或 Docker 实例 已部署。
  • 找到
    的主要数据目录(通常是/var/lib/postgresql/8.4/main on Ubuntu,但这可能会有所不同) 您升级后的 Cloudera 机器。备份此目录并保存在
    安全。
  • 如有必要,请停止 VM/Docker 上的 PostgreSQL。找到主数据目录(通常 /var/lib/postgresql/8.4/main on Ubuntu,但
    这可能会有所不同)。
  • 将之前找到的目录替换为现有 8.4/main 内容的副本(升级后的机器上现在有 PG 9.3 的内容)到 VM/Docker。
  • 在 VM/Docker
  • 上重新启动 PostgreSQL 8.4
  • 使用pg_dumpall 创建完整备份:

    pg_dump全部 > dump.sql

  • 传输 dump.sql 到您的 Cloudera 机器,并恢复它。您可能需要删除之前的 schemas/databases :

    psql -f dump.sql postgres

我可以使用以下过程解决此问题:

第 1 步:在 Ubuntu 14.02

上转储 运行 postgres 数据库
# sudo su

# su - postgres

# pg_dump -h localhost -p 7432 -U scm scm > scm.sql

第 2 步:升级 Ubuntu 到 16.04

# sudo do-release-upgrade

...

第 3 步:重命名旧数据目录

# mv /var/lib/cloudera-scm-server-db/data/ /var/lib/cloudera-scm-server-db/data9-3

第四步:重启cloudera-scm-server-db服务。这将创建一个空数据库,我们将使用步骤 1 中的备份填充该数据库

# sudo service cloudera-scm-server-db restart

第 5 步:现在恢复数据库

# sudo su

# su - postgres

# psql -h localhost -p 7432 -U scm

(密码可以这样获取:grep password /etc/cloudera-scm-server/db.properties)

scm> \i scm.sql

第 6 步:现在重启 cloudera-scm-server 服务:

# sudo service cloudera-scm-service restart