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

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

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
13 декабря 2021 г.
8254
5 минут чтения
Средний рейтинг статьи: 5

New Documentation

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

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

Как Переместить Каталог Данных Postgre SQL В Новое Место В Ubuntu

Подготовка

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

  • сервер Ubuntu 18.04 с непривилегированным пользователем и с sudo-правами;
  • установленный на вашем сервере PostgreSQL.

В этом руководстве мы перемещаем данные на блочное устройство хранения, смонтированное в /mnt/volume_nyc1_01. Способ, описанный здесь, универсален и поможет в перемещении каталога в другое место на любом базовом хранилище.

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

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

sudo -u postgres psql

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

SHOW data_directory;

По умолчанию стоит каталог /var/lib/postgresql/10/main, поэтому нам нужно переместить именно его. Закройте командную строку, введя \q и нажав ENTER.

Прежде чем менять что-либо в каталоге, нужно остановить PostgreSQL; так вы не нарушите целостность данных:

sudo systemctl stop postgresql

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

sudo systemctl status postgresql

Последняя строка вывода сообщит вам, что PostgreSQL действительно остановлен.

Для того чтобы скопировать каталог в новое местоположение, мы будем использовать команду rsync. К ним можно добавить флаги: -a сохраняет разрешения и другие свойства у каталога, а -v обеспечивает детальный вывод – так вы сможете следить за прогрессом. Чтобы сымитировать изначальную структуру каталогов в новом местоположении, мы запустим rsync из каталога postgresql. Если мы создадим этот каталог postgresql в каталоге точки монтирования и сохраним право собственности за пользователем PostgreSQL, то не столкнёмся с проблемами разрешений во время обновлений в будущем.

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

Строго говоря, каталог с номером версии 10 необязателен, поскольку расположение в файле postgresql.conf было задано точно. Однако желательно следовать соглашению по проекту, особенно если позже возникнет необходимость запускать несколько версий 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

Теперь мы можем настроить PostgreSQL для доступа к каталогу данных в новом месте.

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

По умолчанию значение для data_directory выставлено на /var/lib/postgresql/10/main в файле /etc/postgresql/10/main/postgresql.conf. Его нужно отредактировать, чтобы указать новый каталог:

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

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

/etc/postgresql/10/main/postgresql.conf

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

Сохраните файл и закройте его, последовательно нажав CTRL + X, Y и ENTER. Для настройки PostgreSQL в новом каталоге делать делать ничего больше не надо. На этом этапе осталось только снова включить службу PostgreSQL и проверить, что она действительно указывает на правильный каталог данных.

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

После изменения директивы data_directory в файле postgresql.conf запустите сервер PostgreSQL с помощью systemctl:

sudo systemctl start postgresql

Проверьте статус сервера:

sudo systemctl status postgresql

Если служба запустилась правильно, вы увидите вот такую строку в конце вывода этой команды.

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

sudo -u postgres psql

Ещё раз проверьте значение каталога данных:

SHOW data_directory;

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

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

Таким образом, вы успешно переместили каталог данных PostgreSQL в новое местоположение.

Заключение

Если вы верно следовали инструкциям, каталог вашей базы данных теперь в новом месте, а вы ещё ближе к возможности масштабирования хранилища. Поздравляем!

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону