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

Обновление PostgreSQL на EC2 с минимальным влиянием на существующую конфигурацию

У меня установлен PostgreSQL 9.2 на экземпляре EC2, с yum install. Теперь мне нужно перейти на PostgreSQL 9.4. Я заметил это yum list перечисляет 9.2, 9.3 и 9.4 как полностью отдельные пакеты, поэтому я не могу просто выполнить обновление с помощью функции обновления yum.

У меня есть база данных, которая должна пережить обновление. Кроме того, у меня есть некоторая конфигурация, настроенная в /var/lib/pgsql9/data (сертификат сервера / ключ в .crt/.key файлы, изменения в pg_hba.conf, изменения к postgresql.conf), который также должен выжить.

Я видел этот вопрос но информация там не имеет отношения к сценарию пакета yum (и кажется устаревшей), и, кроме того, конкретно не касается проблем конфигурации.

Каков правильный / рекомендуемый способ выполнить обновление, сохранив при этом мои настройки конфигурации и гарантируя, что база данных будет работать после обновления?

Я нашел способ сделать это, но не уверен, что это правильный / рекомендуемый способ. Мои шаги ниже:

1. Сохраните существующую конфигурацию.

Бегать sudo vim /var/lib/pgsql9/data/postgresql.conf и sudo vim /var/lib/pgsql9/data/pg_hba.conf и скопируйте куда-нибудь все раскомментированные настройки. Позже вам придется вручную установить их в новой версии PostgreSQL.

2. Установите новую версию PostgreSQL.

Использовать yum list чтобы найти правильные имена пакетов и установить их. В моем случае мне нужно было sudo yum install postgresql94.x86_64 и sudo yum install postgresql94-server.x86_64

Бегать postgres --version, pg_dumpall --version и psql --version чтобы убедиться, что версия была обновлена ​​до новой.

3. Сохраните существующие данные и закройте базу данных.

Остановите все процессы, которые могут изменить базу данных (например, ваше веб-приложение). Бегать sudo pg_dumpall >db.out, с последующим sudo service postgresql stop сразу после этого, чтобы остановить сервер и предотвратить дальнейшее изменение данных. Изучите полученный дамп данных с помощью vim db.out - он должен иметь всю вашу схему БД и данные в простом формате SQL. Вы можете сделать резервную копию этого файла, прежде чем продолжить.

4. Сохраните старый каталог базы данных.

sudo mv /var/lib/pgsql9 /var/lib/pgsql9.old

5. Создайте новый каталог базы данных для новой версии PostgreSQL.

sudo mkdir /var/lib/pgsql9

sudo chown postgres /var/lib/pgsql9

sudo su postgres

в sudo su Подсказка: initdb -D /var/lib/pgsql9/data

Затем нажмите Ctrl-D

6. Скопируйте сертификаты в новый каталог базы данных.

Если вы используете сертификаты, скопируйте их в новый каталог и предоставьте им права собственности, например:

sudo cp /var/lib/pgsql9.old/data/server.key /var/lib/pgsql9/data

sudo cp /var/lib/pgsql9.old/data/server.crt /var/lib/pgsql9/data

sudo chown postgres /var/lib/pgsql9/data/server.crt

sudo chown postgres /var/lib/pgsql9/data/server.key

7. Настройте новую базу данных.

Использовать sudo vim /var/lib/pgsql9/data/postgresql.conf и sudo vim /var/lib/pgsql9/data/pg_hba.conf чтобы настроить базу данных в соответствии с настройками, которые вы сохранили на шаге 1.

8. Исправьте сервис postgresql, чтобы он указывал на новую версию.

Бегать ls -ila /etc/rc.d/init.d - обратите внимание, что у вас есть скрипт для каждой версии (postgresql92, postgresql94), но postgresql сам связан со старой версией. Исправьте это, запустив sudo ln -sf /etc/rc.d/init.d/postgresql94 /etc/rc.d/init.d/postgresql и запустить ls команду еще раз, чтобы проверить правильность ссылки.

9. Запустите службу.

Бегать sudo service postgresql start. Если служба не запускается, скорее всего, это ошибка разрешений (вы забыли chown шаг выше) или синтаксическая ошибка конфигурации. Можно посмотреть логи (/var/lib/pgsql94/pgstartup.log и файлы в /var/lib/pgsql9/data/pg_log) искать ошибку. Если служба запустилась правильно, можно запустить sudo su postgres, затем psql чтобы убедиться, что ваша база данных работает (используйте \q для выхода и нажмите Ctrl-D, чтобы выйти sudo su).

10. Восстановите свои старые данные.

sudo cp db.out /var/lib/pgsql9/data

sudo chown postgres /var/lib/pgsql9/data/db.out

sudo su postgres

И в этой подсказке:

psql -d postgres -f /var/lib/pgsql9/data/db.out

Вы должны увидеть несколько прокручиваемых команд базы данных. На этом этапе ваша база данных обновлена ​​и работает. Вы можете проверить, запустив psql. Использовать \list команда для просмотра списка баз данных, \connect (database_name) для подключения к вашей базе данных, \dt для просмотра списка подключенных таблиц или выполнения команд SQL, завершающихся точкой с запятой. Тип \q бросить курить.

По завершении проверки нажмите Ctrl-D выйти sudo su.

11. Очистить

На этом этапе, когда вы убедитесь, что все работает, вы можете удалить /var/lib/pgsql9.old, /var/lib/pgsql9/db.out, db.out и любые другие резервные копии.