Как обновить базу данных Cloudera Manager Postgres
У меня Cloudera Manager 5.9 установлен на Ubuntu 12.04 со встроенной базой данных postgres. Я обновил Ubuntu до 14.04, используя do-release-upgrade. В процессе, 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.
Как мне пройти это? Я просмотрел много документации, в которой говорится о выгрузке базы данных postgres через pg_dump и восстановлении через psql, но я не знаю, как это применяется в контексте менеджера cloudera, особенно когда база данных не подходит.
На Ubuntu 12.04, когда все работает, я считаю, что дамп можно взять так:
#pg_dump -h localhost -p 7432 -U scm > /tmp/scm_server_db_backup.$(date +%Y%m%d)
Я могу попытаться создать пустую базу данных и восстановить дамп этой базы данных с помощью psql. Но как мне настроить cdh, чтобы он указывал на эту базу данных?
2 ответа
Я могу решить эту проблему, используя следующий процесс:
Шаг 1: Сделайте дамп работающей базы данных postgres в Ubuntu 14.02
# 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
Как вы предлагаете, вам нужно найти способ "преобразовать" файлы данных 8.4 в файлы данных 9.3. Для использования pg_dump потребуется работающий экземпляр PostgreSQL 8.4. Итак, в основном вам нужен работающий Postgresql 8.4 (например, VM или Docker), затем скопируйте существующие поля 8.4 в эту VM/Docker, чтобы эта VM / Docker предоставляла дамп в виде простого текста [обычный SQL, совместимый с любой версией), восстановите этот дамп в виде простого текста в вашем экземпляре 9.3).
Ты можешь попробовать:
- Создайте экземпляр VirtualMachine или Docker с помощью Postgresql 8.4.
развертывается. - Найдите основной каталог данных (обычно /var/lib/postgresql/8.4/main в Ubuntu, но это может отличаться)
ваша модернизированная машина Cloudera. Сделайте резервную копию этого каталога и храните в
безопасный. - Остановите PostgreSQL на вашей VM/Docker, если это необходимо. Найдите основной каталог данных (обычно /var/lib/postgresql/8.4/main в Ubuntu, но
это может отличаться). - Замените предыдущий найденный каталог копией существующего 8.4 / основного контента (тот, что находится на обновленной машине с PG 9.3) на виртуальную машину / докер.
- Перезапустите PostgreSQL 8.4 на ВМ / Docker
Используйте pg_dumpall для создания полной резервной копии:
pg_dumpall> dump.sql
Перенесите dump.sql на свой компьютер Cloudera и восстановите его. Возможно, вам придется удалить предыдущие схемы / базы данных:
psql -f dump.sql postgres