Перемещение каталога данных PostgreSQL в Ubuntu 16.04
Ubuntu | Комментировать запись
Объём базы данных увеличивается, и со временем она исчерпывает пространство файловой системы. Кроме того, если ввод и вывод находится на одном разделе с остальной частью операционной системы, возможные конфликты доступа к устройствам ввода/вывода. RAID, сетевые блочные хранилища и другие устройства предоставляют избыточность данных и другие полезные функции. Если вы хотите добавить больше места и оптимизировать производительность, а также воспользоваться другими функциями хранения, это руководство поможет вам переместить каталог данных PostgreSQL.
Требования
- Сервер Ubuntu 16.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/9.5/main
(1 row)
Данный вывод подтверждает, что PostgreSQL использует каталог данных по умолчанию, /var/lib/postgresql/9.5/main. Чтобы закрыть сессию, введите \q.
Чтобы обеспечить целостность данных, отключите PostgreSQL, прежде чем вносить изменения в каталог данных:
sudo systemctl stop postgresql
Утилита systemctl не отображает результаты некоторых команд управления сервисами. Чтобы убедиться в том, что сервер баз данных был отключен, запросите его состояние:
sudo systemctl status postgresql
Последняя строка вывода должна сообщать:
. . .
Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.
Теперь, когда сервер остановлен, скопируйте текущий каталог данных в новое место с помощью rsync. Флаг –a сохраняет привилегии и другие свойства каталога. Флаг –v предоставляет подробный вывод.
Примечание: Убедитесь, что в названии каталога нет конечной косой черты (которую система может добавить, если вы используете автодополнение). Если такой слеш есть, rsync будет сбрасывать содержимое каталога в точку монтирования, а не в каталог.
Запустите rsync из каталога postgresql, чтобы имитировать первоначальную структуру каталогов в новом каталоге данных. Создавая такой каталог в точке монтирования и сохраняя все права на него за пользователем PostgreSQL, вы можете избежать конфликта привилегий в дальнейшей работе.
Каталог, указывающий версию (9.5), не является строго необходимым, но он не помешает, если вы хотите следовать соглашениям проекта и особенно если у вас есть необходимость в будущем использовать несколько версий PostgreSQL.
sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01
После выполнения rsync переименуйте текущую папку, добавив расширение .bak. Оставьте расширение до тех пор, пока не убедитесь, что данные перемещены успешно. Это поможет не спутать файлы.
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. Откройте этот файл:
sudo nano /etc/postgresql/9.5/main/postgresql.conf
Найдите строку data_directory и укажите путь к новому каталогу данных.
. . .
data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main’
. . .
3: Перезапуск PostgreSQL
Теперь нужно запустить сервер PostgreSQL.
sudo systemctl start postgresql
sudo systemctl status postgresql
Чтобы убедиться в том, что теперь PostgreSQL использует новый каталог данных, откройте интерактивную сессию:
sudo -u postgres psql
Запросите каталог данных:
postgres=# SHOW data_directory;
data_directory
-----------------------------------------
/mnt/volume-nyc1-01/postgresql/9.5/main
(1 row)
Теперь нужно убедиться в том, что база данных полностью функциональна. После проверки целостности данных вы можете удалить резервную копию каталога данных:
sudo rm -Rf /var/lib/postgresql.bak
Перезапустите PostgreSQL ещё раз, чтобы обновить все настройки:
sudo systemctl restart postgresql
sudo systemctl status postgresql
Заключение
Теперь вы знаете, как переместить каталог данных PostgreSQL. В данном руководстве использовалось блочное хранилище, однако эти инструкции подходят для настройки любого устройства независимо от технологии, на которой оно основано.
Tags: NoSQL, PostgreSQL, Ubuntu 16.04