Перенос PostgreSQL базы вместе с пользователями на сервер с другой архитектурой

Встала задача перенести PostgreSQL базу из под самописной CRM со старого физического сервера, на новый виртуальный и как всегда, вылезли проблемы..

Проблема номер раз — простым копированием файлы данных не перенести из за разницы в архитектуре, нет, это можно сделать, но с ОЧЕНЬ большим геморроем.

Проблема номер два — все 200 пользователей которые работают в CRM не записаны внутри базы, а созданы как пользователи PostgreSQL, т.е. простым бэкапом базу перенести конечно можно, но вот пользователей нет. Поэтому единственным разумным решением оказался бэкап через pg_dumpall всего сервера, потом удаление ненужного, расчесывание и полировка.

Ну а раз я взялся за это редкое для меня дело, решил описать подробную процедуру начиная с установки PostgreSQL на Debian 7.5 и заканчивая переносом базы и подключением к ней с другой машины через pgAdmin III.

1. Подготовка чистого сервера, установка необходимого минимума.

Если система свежая и не русифицирована, то это надо сделать до установки базы в обязательном порядке (кто как, а я ставлю всегда только чистую систему, и ставлю только то, что действительно надо, у вас если консоль понимает кириллицу и все нужное стоит, можно этот шаг пропустить). Про русификацию писать не буду, написано про это много, например тут.

Начнем установку.

aptitude install postgresql mc ssh screen

screen тут почти обязательная штука, ибо без него очень неудобно, ведь далее придется делать все из под пользователя postgres. После того, как все поставили, нам надо пере инициировать кластер в нужной локале, дабы избежать проблем с кодировкой. Запускаем screen, делаем два окна, в одном из окно меняем пользователя на того, из под которого работает база.

su - postgres

Во втором окне, которое под root останавливаем сервер:

service postgresql stop

идем сюда /var/lib/postgresql/9.1/main и переносим куда нибудь содержимое (обратите внимание, в разных дистрибутивах путь может различаться).

Удалять нельзя, надо именно перенести, ибо кое что оттуда еще понадобиться. После этого пере инициируем кластер в нужной локали такой вот командой из под того экрана, где мы залогинены под пользователем postgres:

/usr/lib/postgresql/9.1/bin/initdb --locale=ru_RU.utf8 /var/lib/postgresql/9.1/main

Далее в другом окне screen не запуская сервер копируем симлинки server.crt и server.key из нашего бэкапа. После этого можно попробовать запустить сервер, ошибок быть не должно.

2. Теперь настраиваем доступ к базе по сети.   Меняем в конфиге postgresql.conf слушаемый интерфейс, я всегда ставлю «*» и не понимаю тех, кто заморачивается указанием ip внутри сети:

nano /var/lib/postgres/data/postgresql.conf
listen_addresses = '*'

А в конфиге pg_hba.conf определяем по какому подключению, кто, к какой базе, с какого адреса и с каким методом авторизации может подключиться. У меня разрешено подключение с любого ipv4 адреса. Подробнее о настройке pg_hba.conf можно почитать тут разжевано все и очень доступно.

nano /var/lib/postgres/data/pg_hba.conf

host all all 0.0.0.0/0 trust

3. Перенос базы. Обычно в мануалах, после настройки доступа устанавливают пароль для системного пользователя postgres, но т.к. я переношу уже настроенный сервер, мне это делать не надо. Осталось просто слить конфигурацию со всеми базами из под системного пользователя на старом сервере:

pg_dumpall > backup

И так же под системным пользователем залить бэкап в новый сервер (назначением для заливки указываем системную базу postgres):

psql -f backup postgres

После загрузки дампа, на сервере будет точная копия старого сервера, остается только удалить все ненужное.

Странная получилась статейка, какой то адовый сумбур, но на большее у меня не хватает сил и желания.

P.S. Что бы не забыть, решил сохранить настройку беспарольного входа в psql.

Для автологина создаем на сервере с базой в корне домашней директории пользователя файлик:

touch /root/.pgpass

nano /root/.pgpass

И пишем внутрь:

127.0.0.1:5432:*:postgres:pass

Т.е.  разрешен автологин с локалхоста на стандартный порт postgresql 5432 ко всем базам на сервере для пользователя postgres, и последним указан пароль.

Далее, нужно выставить права на файлик:

chmod 600 /root/.pgpass
chown postgres:postgres /root/.pgpass

И можно наслаждаться конструкциями вида (с ключом -w):

/usr/bin/psql --dbname baza --host 127.0.0.1 --port 5432 --username pip -w --command "vacuum full analyze;"

Смотрите так же:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.