Перемещение каталога данных PostgreSQL в Ubuntu 18.04

Объём базы данных увеличивается, и со временем она исчерпывает пространство файловой системы. Кроме того, если ввод и вывод находится на одном разделе с остальной частью операционной системы, возможные конфликты доступа к устройствам ввода/вывода. RAID, сетевые блочные хранилища и другие устройства предоставляют избыточность данных и другие полезные функции. Если вы хотите добавить больше места и оптимизировать производительность, а также воспользоваться другими функциями хранения, этот мануал поможет вам переместить каталог данных PostgreSQL.

Требования

  • Сервер Ubuntu 18.04 и пользователь с доступом к sudo, настроенный по этому мануалу.
  • Сервер PostgreSQL (чтобы установить PostgreSQL, следуйте этому руководству).

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

1: Перемещение каталога данных PostgreSQL

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

sudo -u postgres psql

Запросите каталог данных:

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

Данный вывод подтверждает, что PostgreSQL использует каталог данных по умолчанию, /var/lib/postgresql/10/main. Чтобы закрыть сессию, введите \q.

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

sudo systemctl stop postgresql

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

sudo systemctl status postgresql

Последняя строка вывода должна выглядеть так:

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

Теперь, когда сервер остановлен, скопируйте текущий каталог данных в новое расположение с помощью rsync. Флаг –a сохраняет привилегии и другие свойства каталога. Флаг –v отображает подробный вывод.

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

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

Каталог, указывающий версию (10), не является строго необходимым, но он не помешает, если вы хотите следовать соглашениям проекта и особенно если у вас есть необходимость в будущем использовать несколько версий PostgreSQL.

sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01

После выполнения rsync переименуйте текущую папку, добавив расширение .bak. Оставьте расширение до тех пор, пока не убедитесь, что данные перемещены успешно. Это поможет не спутать файлы.

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

2: Настройка нового каталога данных

По умолчанию data_directory находится в /var/lib/postgresql/10/main согласно файлу /etc/postgresql/10/main/postgresql.conf. Откройте этот файл:

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

Найдите строку data_directory и укажите путь к новому каталогу данных.

. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
. . .

Сохраните и закройте файл (CTRL + X, Y, Enter). Это все, что нужно сделать, чтобы настроить PostgreSQL для поддержки нового каталога данных. Теперь нужно запустить сервис PostgreSQL и убедиться, что он использует новый каталог.

3: Перезапуск PostgreSQL

После изменения директивы data-directory в каталоге postgresql.conf  нужно запустить сервер PostgreSQL.

sudo systemctl start postgresql

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

sudo systemctl status postgresql

Если сервис работает правильно, в конце вывода будет такая строка:

. . .
Jul 12 15:45:01  ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS.
. . .

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

sudo -u postgres psql

Запросите каталог данных:

SHOW data_directory;
data_directory
-----------------------------------------
/mnt/volume_nyc1_01/postgresql/10/main
(1 row)

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

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

Заключение

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

Читайте также: 5 вариантов настройки сервера для обслуживания веб-приложения

Tags: , ,