Перемещение каталога данных PostgreSQL
Cloud Server, Ubuntu | Комментировать запись
Объём БД постоянно увеличивается, и со временем она переполняет пространство файловой системы. Кроме того, если база данных находится на одном разделе с остальной операционной системой, это может привести к конфликтам доступа к устройствам ввода/вывода.
RAID, сетевые блочные хранилища и другие устройства предоставляют избыточность данных и другие полезные функции. Вы можете добавить больше места и оптимизировать производительность системы, а также воспользоваться другими функциями хранения. Этот мануал поможет вам переместить каталог данных PostgreSQL в новое место.
Требования
- Виртуальный сервер и пользователь с доступом к sudo, (мы используем Ubuntu 22.04, настроенный по этому мануалу).
- Сервер 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/14/main (1 row)
Данный вывод подтверждает, что PostgreSQL использует стандартный каталог данных по умолчанию, /var/lib/postgresql/14/main. Это и есть каталог, который нужно переместить. Чтобы закрыть сессию, введите \q.
\q
Отключите PostgreSQL, прежде чем вносить изменения в каталог данных, чтобы обеспечить их целостность:
sudo systemctl stop postgresql
Утилита systemctl не отображает вывод некоторых команд управления сервисами. Чтобы убедиться в том, что сервер БД отключен, запросите его состояние:
sudo systemctl status postgresql
В выводе вы увидите, что в данный момент ваша копия PostgreSQL находится в состоянии inactive (dead):
postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor> Active: inactive (dead) since Thu 2022-06-30 18:46:35 UTC; 27s ago Process: 4588 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 4588 (code=exited, status=0/SUCCESS) CPU: 1ms
Итак, сервер остановлен, теперь скопируйте текущий каталог данных в новое расположение с помощью rsync. Флаг –a сохраняет привилегии и другие свойства каталога, а –v отображает подробный вывод.
Запустите rsync в каталоге postgresql, чтобы имитировать исходную структуру каталогов в новом месте. Нужно создать такой каталог в точке монтирования и сохранить все права на него за пользователем PostgreSQL, чтобы избежать конфликта привилегий в дальнейшей работе.
Примечание: Убедитесь, что в конце названия каталога нет слеша (система может добавить его автоматически, если у вас включена эта функция). Если такой слеш есть, rsync будет сбрасывать содержимое каталога в точку монтирования, а не в сам каталог.
Каталог, указывающий версию (14), не является строго необходимым. В то же время вам не помешает его иметь, если вы хотите следовать соглашениям проекта и особенно если у вас есть необходимость в будущем использовать несколько версий PostgreSQL.
sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01
Переименуйте текущую папку, добавив расширение .bak. Оставьте расширение до тех пор, пока не убедитесь, что данные перемещены успешно. Это поможет не спутать одноименные файлы в новом и старом расположении в процессе работы.
sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak
2: Настройка нового каталога данных
Согласно файлу /etc/postgresql/14/main/postgresql.conf, по умолчанию data_directory находится в /var/lib/postgresql/14/main. Откройте этот файл:
sudo nano /etc/postgresql/14/main/postgresql.conf
Найдите строку, начинающуюся с data_directory, и укажите путь к новому каталогу. В контексте этого руководства обновленная директива будет записана так:
. . . data_directory = '/mnt/volume_nyc1_01/postgresql/14/main' . . .
Сохраните и закройте файл (CTRL + X, Y, Enter). Мы сделали все, что нужно для настройки PostgreSQL и поддержки нового каталога данных. Теперь пора запустить сервис PostgreSQL и убедиться, что он использует новый каталог.
3: Перезапуск PostgreSQL
Изменив директиву data-directory в каталоге postgresql.conf, вы должны запустить сервер PostgreSQL.
sudo systemctl start postgresql
Давайте убедимся в том, что теперь PostgreSQL использует новый каталог данных. Запросите для этого состояние сервиса:
sudo systemctl status postgresql
Если сервис работает правильно, в выводе будет сказано active (exited):
postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor> Active: active (exited) since Thu 2022-06-30 18:50:18 UTC; 3s ago Process: 4852 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 4852 (code=exited, status=0/SUCCESS) CPU: 1ms
Мы можем убедиться, что PostgreSQL использует новый каталог данных. Откройте для этого командную строку PostgreSQL:
sudo -u postgres psql
Снова запросите каталог данных:
SHOW data_directory;
Вы получите следующий результат:
data_directory ---------------------------------------- /mnt/volume_nyc1_01/postgresql/14/main (1 row)
Как видите, PostgreSQL использует новое расположение данных. Также вам необходимо убедиться в том, что БД полностью работает, а вы можете взаимодействовать с данными. После проверки целостности данных вы можете удалить резервную копию каталога данных:
sudo rm -Rf /var/lib/postgresql/14/main.bak
Заключение
Теперь вы знаете, как переместить каталог данных PostgreSQL в новое расположение. В данном руководстве в качестве нового места использовалось блочное хранилище, однако эти инструкции подходят для настройки любого устройства независимо от технологии, на которой оно основано.
Читайте также: 5 вариантов настройки сервера для обслуживания веб-приложения
Tags: PostgreSQL, Ubuntu 22.04