Как переместить каталог данных PostgreSQL в новое место в Ubuntu 16.04

Вступление

Базы данных растут со временем, иногда перерастая пространство в исходной файловой системе. Вы также можете столкнуться с конфликтами ввода-вывода, если они расположены в том же разделе, что и остальная часть операционной системы. RAID, сетевое хранилище и другие устройства могут обеспечивать избыточность и другие желательные функции. Независимо от того, добавляете ли вы больше места, оцените способы оптимизации производительности или хотите воспользоваться другими функциями хранения, это руководство поможет вам переместить каталог данных PostgreSQL.

Предпосылки

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

  • An Ubuntu 16.04 server with a non-root user with sudo privileges. Вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководствеInitial Server Setup with Ubuntu 16.04.

  • A PostgreSQL server. Если вы еще не настроили его, руководствоHow To Install and Use PostgreSQL on Ubuntu 16.04 может вам помочь.

В этом примере мы перемещаем данные на блочное устройство хранения, установленное в/mnt/volume-nyc1-01. Если вы используете блочное хранилище в DigitalOcean,this guide может помочь вам смонтировать том, прежде чем продолжить изучение этого руководства.

Независимо от того, какое хранилище вы используете, следующие шаги могут помочь вам переместить каталог данных в новое место.

[[step-1 -—- moving-the-postgresql-data-directory]] == Шаг 1. Перемещение каталога данных PostgreSQL

Чтобы подготовиться к перемещению каталога данных PostgreSQL, давайте проверим текущее местоположение, запустив интерактивный сеанс PostgreSQL. В строке нижеpsql - это команда для входа в интерактивный монитор, а-u postgres указывает sudo выполнитьpsql как системный пользователь postgres:

sudo -u postgres psql

После того, как вы вошли в монитор, выберите каталог данных:

SHOW data_directory;
Output       data_directory
------------------------------
/var/lib/postgresql/9.5/main
(1 row)

Эти выходные данные подтверждают, что PostgreSQL настроен на использование каталога данных по умолчанию,/var/lib/postgresql/9.5/main, так что это каталог, который нам нужно переместить. После подтверждения каталога в вашей системе введите\q, чтобы выйти.

Чтобы обеспечить целостность данных, мы выключим PostgreSQL, прежде чем мы действительно внесем изменения в каталог данных:

sudo systemctl stop postgresql

systemctl не отображает результат выполнения всех команд управления службами. Чтобы убедиться, что вы добились успеха, используйте следующую команду:

sudo systemctl status postgresql

Вы можете подтвердить, что он выключен, если в последней строке вывода указано, что сервер остановлен:

Output. . .
Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.

Теперь, когда сервер выключен, мы скопируем существующий каталог базы данных в новое место с помощьюrsync. Использование флага-a сохраняет разрешения и другие свойства каталога, в то время как-v предоставляет подробный вывод, чтобы вы могли следить за прогрессом.

[.note] #Note: Убедитесь, что в каталоге нет завершающей косой черты, которая может быть добавлена, если вы используете завершение табуляции. Когда стоит косая черта в конце,rsync будет сбрасывать содержимое каталога в точку монтирования вместо того, чтобы передавать его в содержащий каталогPostgreSQL:
#

Мы собираемся запуститьrsync из каталогаpostgresql, чтобы имитировать исходную структуру каталогов в нашем новом месте. Создав этот каталогpostgresql в каталоге точки монтирования и сохранив право владения за пользователем PostgreSQL, мы можем избежать проблем с разрешениями для будущих обновлений. Каталог версии9.5 не является строго необходимым, поскольку мы явно определили расположение в файлеpostgresql.conf, но следование соглашению по проекту, безусловно, не повредит, особенно если возникнет необходимость в будущем для запуска нескольких версий PostgreSQL.

sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01

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

sudo mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.bak

Теперь мы готовы обратить наше внимание на конфигурацию.

[[step-2 -—-cting-to-the-new-data-location]] == Шаг 2 - Указание на новое местоположение данных

PostgreSQL имеет несколько способов переопределить значения конфигурации. По умолчанию дляdata_directory установлено значение/var/lib/postgresql/9.5/main в файле/etc/postgresql/9.5/main/postgresql.conf. Отредактируйте этот файл, чтобы отразить новый каталог данных:

sudo nano /etc/postgresql/9.5/main/postgresql.conf

Найдите линию, которая начинается сdata_directory, и измените путь, который следует за ней, чтобы отразить новое местоположение.

В нашем случае обновленный файл выглядит примерно так:

/etc/postgresql/9.5/main/postgresql.conf

. . .
data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main'
. . .

[[step-3 -—- restarting-postgresql]] == Шаг 3 - перезапуск PostgreSQL

Мы готовы запустить PostgreSQL.

sudo systemctl start postgresql
sudo systemctl status postgresql

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

sudo -u postgres psql

Посмотрите на значение для каталога данных еще раз:

SHOW data_directory;
Output            data_directory
-----------------------------------------
/mnt/volume-nyc1-01/postgresql/9.5/main
(1 row)

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

sudo rm -Rf /var/lib/postgresql/9.5/main.bak

Перезапустите PostgreSQL в последний раз, чтобы убедиться, что он работает должным образом:

sudo systemctl restart postgresql
sudo systemctl status postgresql

Заключение:

Если вы последовали этому примеру, ваша база данных должна работать со своим каталогом данных в новом месте, и вы выполнили важный шаг к возможности масштабирования хранилища. Вы также можете взглянуть на5 Common Server Setups For Your Web Application, чтобы узнать, как создать серверную инфраструктуру, которая поможет вам масштабировать и оптимизировать веб-приложения.

Related