оновлення від postgres 9.1 до 9.3 на сервері ubuntu


27

У мене виробничий сервер (ubuntu 13.10) працює з postgresql 9.1.

Я хочу використовувати кілька функцій 9.3, отже, хочу оновити.

Чи може мені хтось допомогти з оновленням з 9,1 до 9,3, щоб час простою не перевищував 30 хвилин. або так?

Основна проблема - запобігання втраті даних або надмірності файлів.


2
Документи Postgres справді хороші. google.co.uk/#q=postgres+upgrade+from+9.1+to+9.3
Philᵀᴹ

Я не DBA сам по собі (доглядати за незвичайною установкою Postgres і навіть непарним mysql;}), і ця публікація стара, але чому б ви використовували будь-який випуск Ubuntu X.10 для prod, а не X.04 LTS?
тинк

Відповіді:


28

В основному є три способи оновлення PostgreSQL з різних основних версій (наприклад, 9.1 до 9.3).

Оновлення за допомогою pg_dump

Перший і рекомендований, якщо це можливо, - це зробити скидання старої (9.1) версії, використовуючи двійковий файл нової (9.3) версії та відновити її на новому кластері, створеному з нової версії.

Цей підхід, як правило, повільніший, але також найбільш здійсненний. Одна порада, щоб зробити це швидше, - це використання одночасності. Для демпінгу з паралельними завданнями ви можете:

$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase

Вам доведеться зробити це для кожної наявної бази даних, відрегулювати --jobs=4значення на будь-яке значення (протестуйте деякі значення від 2 до кількості ядер і подивіться, що дає кращу швидкість). Крім того, під час цієї фази ніхто не повинен бути з'єднаний з базою даних, будь-яка модифікація призведе до пошкодженого дампа (через незахищений варіант --no-synchronized-snapshots).

Після цього ви можете відновити дамп у новий екземпляр, використовуючи pg_restore:

$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump

Після цього рекомендується запустити ANALYZEна вашій базі даних:

$ vacuumdb --analyze-only mydatabase

(Якщо ви можете дозволити собі час, працювати тільки --analyzeтакож VACUUMбази даних і оновлення карти видимості)

Оновлення за допомогою pg_upgrade

Іншим варіантом є використання contribpg_upgrade . Використовуючи --linkметод, він забезпечує дійсно швидкий спосіб оновлення PostgreSQL.

Перед використанням потрібно зробити резервну копію всього каталогу даних, оскільки в --linkрежимі, якщо щось піде не так, ви можете втратити і дані (і нові, і старі). Крім того, прочитайте всі документи та спеціально примітки внизу (для pg_upgrade є деякі обмеження).

ОНОВЛЕННЯ: Будь ласка, використовуйте цю --checkопцію перед запуском остаточної команди. Також для великих баз даних рекомендується запустити цю команду на екрані сеансу.

Оновлення за допомогою інструмента реплікації на основі тригера

Інший варіант оновлення версії - використання інструменту реплікації на основі тригера. Як Слоні, Букардо та Лондісте.

Це варіант, який вимагає найменшого можливого простою, але це найскладніший варіант роботи.

Для цього вам потрібно створити ведучий підлеглий, де ведучим є ваша поточна версія (9.1), а підлеглий - нова версія (9.3). Потім зачекайте першої синхронізації (із системою, яка все ще знаходиться у виробництві), після чого ви закриєте всіх, підключених до бази даних (час простою починається тут), дочекаєтеся, коли підлеглий досягне, просуває його (підлеглий) для освоєння та перенаправити всіх клієнтів / програм на цю нову версію. І ви закінчили.

Документація Slony забезпечує покрокове оновлення PostgreSQL за допомогою Slony .

Який вибрати

Ну, як завжди залежить, відновлення:

  • Дамп + відновлення є найнадійнішим, але, як правило, найбільш повільним (паралелізм може дати досить хороші результати)
  • Pg_upgrade - це один з найкращих варіантів для невеликих простоїв (якщо ви можете використовувати, дивіться обмеження), це часто займає лише кілька хвилин, навіть для великих баз даних
  • Реплікація тригера, без сумніву, є тим, що дає найменший можливий час простою (біля нуля), але це дійсно важко досягти, і я рекомендую лише досвідченим людям (як на PostgreSQL, так і на інструменті реплікації).

Сподіваюся, я міг допомогти. Удачі.


Чи буде pg_upgrade також працювати з 8.4.17 до 9.3?
ДжонМерліно

@JohnMerlino: так, pg_upgrade може оновити з 8.3 або новіших версій (вона включає 8.3, 8.4, 9.0, 9.1, 9.2, ...).
MatheusOl

"використання двійкового файлу нової (9.3) версії" може бути не таким необхідним. У мене, принаймні, це працює, не роблячи цього біта.
theicfire

@theicfire це насправді залежить від обох версій (старої та нової), може працювати чи не працювати. Насправді це спрацює в більшості випадків, за винятком деяких повідомлень про помилки, які, як правило, можна сприймати… Офіційна процедура полягає у використанні двійкових даних нової версії, хоча!
MatheusOl

Можливо, ви зможете використовувати їх pg_dumpallдля одночасного скидання всіх баз даних.
Матьє

7

Виконайте наступні кроки для оновлення постгресів 9.1 до 9.3:

  1. Спочатку створіть /etc/apt/sources.list.d/pgdg.list файл із таким вмістом для ubuntu:

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
  2. Додати ключ, виконаний нижче:

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. Встановіть інструменти для розробників з postgres:

    sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
  4. Щоб підтвердити нашу установку, ми введемо “sudo pg_lsclusters” і побачимо дві наші версії PostgreSQL.

  5. Припинення послуги Postgressql:

    sudo service postgresql stop
  6. Видаліть кластер 9.3 за замовчуванням, створений установкою 9.3.

    sudo pg_dropcluster --stop 9.3 main
  7. Створіть новий кластер 9.3 із існуючого кластера 9.1.

    sudo pg_upgradecluster 9.1 main
  8. Переконайтеся, що новий кластер завантажується і ми працюємо з PostgreSQL 9.3.

    sudo service postgresql start 9.3
  9. Якщо все працює, опускайтесь до кластера 9.1.

    pg_dropcluster --stop 9.1 main

Для отримання додаткової інформації перейдіть за цим посиланням


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.