обновление с 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ᵀᴹ
Я не являюсь администратором баз данных как таковым (мне нужно следить за нечетной установкой Postgres и даже за odder 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опцию перед запуском окончательной команды. Также для больших баз данных рекомендуется запускать эту команду в сеансе экрана.

Обновление с использованием инструмента репликации на основе триггера

Другой вариант обновления версии - использование инструмента репликации на основе триггера. Как Слони, Bucardo и Londiste.

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

Для этого вам нужно построить master-slave, где master - это ваша текущая версия (9.1), а slave - новая версия (9.3). Затем вы ждете первую синхронизацию (с системой, которая еще работает), после чего вы закрываете всех, кто подключен к базе данных (здесь начинается время простоя), ждете, когда ведомое устройство догонит, продвинет его (подчиненное устройство) к управлению и перенаправить всех клиентов / приложений на эту новую версию. И вы сделали.

Документация по Slony предоставляет пошаговое обновление PostgreSQL с использованием Slony .

Какой выбрать

Ну как всегда зависит, возобновим

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

Я надеюсь, что смогу помочь. Удачи.

MatheusOl
источник
Будет ли работать 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

Выполните следующие шаги для обновления Postgres 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

для получения дополнительной информации обратитесь к этой ссылке

Снехал Пармар
источник