如何升级 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
我在 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