Поиск по сайту:

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


Введение

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

Предпосылки

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

  • Сервер Ubuntu 16.04 с пользователем без полномочий root с привилегиями sudo. Вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководстве Initial Server Setup with Ubuntu 16.04.
  • Сервер PostgreSQL. Если вы еще не настроили его, вам может помочь руководство «Как установить и использовать PostgreSQL в Ubuntu 16.04».

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

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

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

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

  1. sudo -u postgres psql

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

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

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

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

  1. sudo systemctl stop postgresql

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

  1. sudo systemctl status postgresql

Вы можете подтвердить, что он выключен, если последняя строка вывода сообщает вам, что сервер остановлен:

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

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

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

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

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

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

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

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

Шаг 2 — Указание на новое местоположение данных

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

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

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

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

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

Шаг 3 — Перезапуск PostgreSQL

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

  1. sudo systemctl start postgresql
  2. sudo systemctl status postgresql

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

  1. sudo -u postgres psql

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

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

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

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

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

  1. sudo systemctl restart postgresql
  2. sudo systemctl status postgresql

Заключение:

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