我在Ubuntu 12.04上安装了Cloudera Manager 5.9,带有嵌入式postgres数据库。我使用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 manager的上下文中是如何应用的,特别是当数据库没有出现时。
在Ubuntu 12.04上,当一切正常时,我相信转储可以这样:
#pg_dump -h localhost -p 7432 -U scm > /tmp/scm_server_db_backup.$(date +%Y%m%d)
我可以尝试创建一个空数据库,并使用psql将转储恢复到此数据库。但是如何配置cdh指向此数据库?
答案 0 :(得分:1)
如您所知,您需要找到一种方法将8.4数据文件“转换”为9.3个数据文件。 使用pg_dump将需要一个有效的PostgreSQL 8.4实例。所以,基本上你需要一个工作的Postgresql 8.4(想想VM或Docker),然后将现有的8.4 fiels复制到那个VM / Docker,让VM / Docker提供纯文本转储[纯SQL,与任何版本兼容),将该纯文本转储恢复到9.3实例中。
您可以尝试:
使用pg_dumpall创建完整备份:
pg_dumpall> dump.sql
将dump.sql传输到Cloudera计算机并恢复它。您可能需要删除以前的模式/数据库:
psql -f dump.sql postgres
答案 1 :(得分:1)
我可以使用以下过程解决此问题:
步骤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
步骤4:重新启动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