avatar CentOS Перенос данных PostgreSQL в CentOS ( из PostgreSQL 9.3 в PostgreSQL 9.4)

Всем привет.
В этот раз, я опишу способ миграции базы данных из старой версии PostgresSQL в новую, в феврале состоялся релиз PostgresSQL 9.4 и после тестирования, мы решили переехать на ее, до этого стояла PostgresSQL 9.3, дынных в ней было довольно много + статистика Zabbix за 1,5 года, которую было жалко терять т.к. в разговоре с руководством это сильно помогало аргументировать свою точку зрения.
Все это было сделано на ОС CentOS 6.6, но также будет работать на CentOS 7, в статье постараюсь описать оба варианта.
Предполагается что у вас есть сервер на котором установлен PostgresSQL 9.3.
Для начала нам необходимо установить PostgresSQL 9.4, добавим репозиторий и установим пакет.

Для CentOS 6
rpm -ivh http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm


Для CentOS 7
rpm -ivh http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm


теперь установим новый Postgres
yum install postgresql94-server


нам необходимо заставить новый сервер временно работать на другом порту, стандартный порт 5432 мы переведем Postgres 9.4 на порт 5433

отредактируем конфиг
nano /var/lib/pgsql/9.4/data/postgresql.conf


Находим строку
#port = 5432


Превращаем в
port = 5433


Осталось инициализировать базу на новом сервере
Для CentOS 6
/etc/init.d/postgresql94-setup initdb


Для CentOS 7
/usr/pgsql-9.4/bin/postgresql94-setup initdb


Останавливаем старый сервер PostgresSQL
Для CentOS 6
/etc/init.d/postgresql-9.3 stop


Для CentOS 7
systemctl stop postgresql-9.3


нам остается запустить pg_upgrade данная тулза принимает значения ключей
-b — Директория со старыми бинарниками postgresql
-B — Директория с новыми бинарниками postgresql
-d — Расположения старых баз postgresql
-D — Расположения новых баз postgresql

Тогда команда принимает вид:
/usr/pgsql-9.4/bin/pg_upgrade -v -b /usr/pgsql-9.3/bin/ -B /usr/pgsql-9.4/bin/ -d /var/lib/pgsql/9.3/data/ -D /var/lib/pgsql/9.4/data/


Ждем когда все операции завершатся, а это зависит от размера баз.
Если у вас были прописаны доступы, то их необходимо перенести в новый сервер PostgresSQL
cp /var/lib/pgsql/9.3/data/pg_hba.conf /var/lib/pgsql/9.4/data/

если требуется еще и конфиг то:
cp /var/lib/pgsql/9.3/data/postgresql.conf /var/lib/pgsql/9.4/data/


Запускаем PostgresSQL 9.4
Для CentOS 6
/etc/init.d/postgresql-9.4 start


Для CentOS 7
systemctl start postgresql-9.4


Нам необходимо проанализировать данные и устранить возможные ошибки с помощью analyze_new_cluster.sh
sh /var/lib/pgsql/analyze_new_cluster.sh


После завершения, запустим удаление старых данных
sh /var/lib/pgsql/delete_old_cluster.sh


Нам остается только удалить старый сервер 9.3
yum remove postgresql93


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

Отредактируем конфиг:
nano /var/lib/pgsql/9.4/data/postgresql.conf


Находим строку
port = 5433


Превращаем в
port = 5432


И перезагружаем Postgres, дальше пользуемся.

0 комментариев

Есть что добавить? Регистрируйся и оставляй комментарии!