Назад | Перейти на главную страницу

Полное решение для обновления PostgreSQL на рабочем сервере debian

Я использую Debian 6 (Squeeze) в производстве для нескольких веб-сайтов. Я решил использовать бэкпорты postgresql, чтобы использовать возможности PostgreSQL 9.0. Я думал, что он останется 9.0 и будет получать обновления до этой основной версии.

К сожалению, бэкпорты Squueze были обновлены до PostgreSQL 9.1, поэтому, вероятно, я не буду получать обновления до 9.0.

Я планирую перейти на 9.1, но знаю, что это не происходит автоматически.

Я читал об официальном pg_upgrade и debian pg_upgradecluster, но я был бы признателен за полное руководство по обновлению.

  1. Что нужно сделать (сначала apt-get install postgresql, затем pg_upgradecluster, затем удалить старый кластер)? Список шагов был бы неплохим.
  2. Каковы возможные сценарии сбоя?
  3. Как подготовиться к неудачам и отреагировать на них?

Я могу остановить базу данных только на пару часов, поэтому я хочу быть готовым

Довольно сложно дать вам пошаговый процесс обновления, адаптированный к вашей ситуации / среде.
Я попытался осветить некоторые из основных моментов ниже, но вам действительно нужно адаптировать процесс к вашей среде.


Step Zero, решите, нужно ли вам обновляться. Postgres 9.1 предлагает синхронную репликацию и множество других интересных вещей, которые полезны, если они вам нужны, но не повод для немедленного обновления, если вы этого не сделаете.

Шаг 1, ожидайте, что это займет много времени, если ваша база данных большая.
Даже используя pg_upgrade простой процесс копирования данных для резервной копии может занять некоторое время: для наших баз данных размером 16 ГБ требуется час или больше для pg_dump / pg_restore или около 10-20 минут для pg_upgrade).

Шаг 2, я предлагаю прочитать 9.1 Примечания к выпуску. Убедитесь, что все, что вам нужно, не сломано и ничего не изменилось.
Нет ничего лучше, чем обновление базы данных, которое разрушит ваши производственные системы и действительно испортит вам месяц.

Шаг 3, Раздел обновления руководства Postgres требуется чтение.

Шаг 4 (вставьте сюда любые специфические для Debian вещи, но это действительно не моя сумка :-)

Шаг 5. Создайте план обновления.

Шаг 6. Проверьте план обновления (технически необязательно, но сильно рекомендуемые).

Шаг 7. Выполните обновление производственных систем.


Применяются стандартные предостережения:

  • Обновление может уничтожить вашу базу данных. Сделайте резервную копию.
    • Убедитесь, что вы сможете его восстановить.
    • Убедитесь, что вы можете восстановить двоичные файлы для системы баз данных тоже.
      (Держитесь за свои старые пакеты Debian, если можете - я видел людей, которые не могли отказаться от неудачного обновления, потому что у них больше нет старых двоичных файлов базы данных, и это действительно очень печальное зрелище.)

  • Это займет больше времени, чем вы ожидаете. Запланируйте это.
    Политика моей компании по обновлению БД: «Начинайте в 18:00 в пятницу. Если не работает к 9:00 в воскресенье, откатывайтесь».

  • Оседлайте скретч-обезьяну
    Если ваши данные действительно важны, восстановите их копию в другом месте и проверьте свой путь обновления.
    Да, я делаю это с базами данных на 16 ГБ. Я все равно сделаю это с базами данных на 160 ГБ, если найду способ заставить его работать :-)

Это в основном шаг 4 - плюс --check возможность убедиться, что ваши пути верны. Моя установка происходит из репозиториев и имеет стандартные пути к файлам debian.

postgres@example.org:~$ /usr/lib/postgresql/9.1/bin/pg_upgrade --old-datadir /var/lib/postgresql/9.0/main --new-datadir /var/lib/postgresql/9.1/main --old-bindir /usr/lib/postgresql/9.0/bin/ --new-bindir /usr/lib/postgresql/9.1/bin/ --check

Это не удалось - я постоянно говорил, что оба сервера работают на одном порте.

Похоже, работало следующее:

pg_dumpall -p 5432 | psql -d postgres -p 6543

Это полезно.