Иногда возникает необходимость в копировании всей БД одного сервера на другой (создание тестовой площадки, перенос настроек и т.п.).
Перенос осуществляется в два действия - создания копии базы и восстановление базы из копии на новом сервере.
Создание копии базы данных
Для создания копии базы необходимо:
- Остановить службы на веб-сервере
sudo systemctl stop vitro-server vitro-workflow - Выполнить команду для создания файла копии базы данных
pg_dump -h localhost -d vitrodb -U vitrodbuser -v -Fc -f bak/vitrodb.Fc.bak
В этой командеvitrodbэто имя базы данных,vitrodbuserэто имя пользователя-владельца базы данных,bak/vitrodb.Fc.bakпуть до файла копии.
Выполнять команду необходимо на сервере баз данных. После выполнения будет запрошен пароль указанного в-Uпользователя. - В результате будет получен файл копии базы данных. Его необходимо переместить на целевой сервер для восстановления базы из копии.
- После создания копии нужно включить службы на веб-сервере
sudo systemctl start vitro-server vitro-workflow
Восстановление базы данных из копии
Для восстановления базы данных из копии нужно сперва очистить уже имеющуюся базу (если есть):
- Остановить службы на веб-сервере
sudo systemctl stop vitro-server vitro-workflow - Удалить базу данных
dropdb -U vitrodbuser vitrodb
В этой командеvitrodbэто имя базы данных,vitrodbuserэто имя пользователя-владельца базы данных.
Выполнять команду необходимо на сервере баз данных. - Создать пустую базу данных. Для этого войти в
psqlи выполнить запрос на создание:sudo -u postgres psqlCREATE DATABASE vitrodb with owner = vitrodbuser encoding = 'UTF8' LOCALE_PROVIDER = icu ICU_LOCALE = 'ru' TEMPLATE = template0 connection limit = -1;
После того, как создана пустая база можно приступить к восстановлению данных из файла копии:
- Выполнить команду восстановления
pg_restore -h localhost -d vitrodb -U vitrodbuser -v -Fc bak/vitrodb.Fc.bak
В этой командеvitrodbэто имя базы данных,vitrodbuserэто имя пользователя-владельца базы данных,bak/vitrodb.Fc.bakпуть до файла копии. - Запустить службы на веб-сервере
sudo systemctl start vitro-server vitro-workflow