Базы данных имеют тенденцию перерастать свою исходную файловую систему, увеличиваясь со временем. Если вдобавок они занимают одинаковый с операционной системой раздел, это потенциально может привести к конфликту ввода-вывода.
Такие устройства, как сетевое блочное хранилище RAID, обеспечивают избыточность и улучшают масштабируемость. Вне зависимости от ваших целей, например, увеличить место или оптимизировать производительность, это руководство поможет вам в перемещении каталога данных PostgreSQL.
Для прохождения этого руководства вам понадобятся:
В этом руководстве мы перемещаем данные на блочное устройство хранения, смонтированное в /mnt/volume_nyc1_01
. Способ, описанный здесь, универсален и поможет в перемещении каталога в другое место на любом базовом хранилище.
Сначала нужно проверить текущее местоположение каталога, запустив интерактивный сеанс 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 для доступа к каталогу данных в новом месте.
dbaas
По умолчанию значение для 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 и проверить, что она действительно указывает на правильный каталог данных.
После изменения директивы 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 в новое местоположение.
Разверните PostgreSQL в облаке за минуту
Если вы верно следовали инструкциям, каталог вашей базы данных теперь в новом месте, а вы ещё ближе к возможности масштабирования хранилища. Поздравляем!