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

Вступление

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

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

Предпосылки

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

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

  • PostgreSQL установлен на вашем сервере. Если вы еще не настроили это, руководствоHow To Install and Use PostgreSQL on Ubuntu 18.04 может вам помочь.

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

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

[[step-1 -—- moving-the-postgresql-data-directory]] == Шаг 1. Перемещение каталога данных PostgreSQL

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

sudo -u postgres psql

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

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

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

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

sudo systemctl stop postgresql

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

sudo systemctl status postgresql

В последней строке вывода должно быть указано, что PostgreSQL остановлен:

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

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

[.note] #Note: Убедитесь, что в каталоге нет завершающей косой черты, которая может быть добавлена, если вы используете завершение табуляции. Если вы добавите косую черту в конце,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 для доступа к каталогу данных в новом месте.

[[step-2 -—-cting-to-the-new-data-location]] == Шаг 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 и убедиться, что она действительно указывает на правильный каталог данных.

[[step-3 -—- restarting-postgresql]] == Шаг 3 - перезапуск PostgreSQL

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

sudo systemctl start postgresql

Чтобы убедиться, что сервер PostgreSQL успешно запустился, проверьте его статус, снова используяsystemctl:

sudo systemctl status postgresql

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

Output. . .
Jul 12 15:45:01  ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS.
. . .

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

sudo -u postgres psql

Проверьте значение для каталога данных еще раз:

SHOW data_directory;
Output            data_directory
-----------------------------------------
/mnt/volume_nyc1_01/postgresql/10/main
(1 row)

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

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

Благодаря этому вы успешно переместили каталог данных PostgreSQL в новое место.

Заключение:

Если вы последовали этому примеру, ваша база данных должна работать со своим каталогом данных в новом месте, и вы выполнили важный шаг к возможности масштабирования хранилища. Вы также можете взглянуть на5 Common Server Setups For Your Web Application, чтобы узнать, как создать серверную инфраструктуру, которая поможет вам масштабировать и оптимизировать веб-приложения.

Related