Перемещение каталога данных PostgreSQL 12 в Ubuntu 18.04

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

Исходные данные: ОС Ubuntu 18.04 с PostgreSQL 12
Задача: Перенести каталог данных кластера на новый диск.

Для начала проверим где сейчас находится каталог данных кластера:

su - postgres -c 'psql -c "SHOW data_directory;"'

Вывод:

       data_directory
----------------------------
 /var/lib/postgresql/12/main
(1 row)

Это стандартный путь размещения каталога, в котором хранятся данные.

На сервер подключили новый дисковый массив и смонтировали его в /pgdata, именно туда нам и нужно перенести данные.

Для переноса останавливаем кластер:

pg_ctlcluster 12 main stop

Переносим данные с помощью rsync и устанавливаем владельца:

Важное примечание: Убедитесь, что в названии каталога нет конечного слеша (система может добавить его, если вы используете автодополнение). Если такой слеш есть, то уберите его.

rsync -av /var/lib/postgresql /pgdata
chown -R postgres:postgres /pgdata

Переименовываем текущий каталог данных

mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.backup

Отредактируем файл конфигурации кластера /etc/postgresql/12/main/postgresql.conf
В нем нам нужно заменить настройку

data_directory = '/var/lib/postgresql/12/main'
на
data_directory = '/pgdata/postgresql/12/main'

Теперь можно запустить кластер:

pg_ctlcluster 12 main start

Проверим лог-файл:

tail -f /var/log/postgresql/postgresql-12-main.log

Часть вывода:

2019-11-08 07:17:01.252 UTC [4684] LOG:  starting PostgreSQL 12.0 (Ubuntu 12.0-2.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit
2019-11-08 07:17:01.252 UTC [4684] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2019-11-08 07:17:01.253 UTC [4684] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2019-11-08 07:17:01.306 UTC [4685] LOG:  database system was shut down at 2019-11-08 07:10:11 UTC
2019-11-08 07:17:01.310 UTC [4684] LOG:  database system is ready to accept connections

PostgreSQL успешно запустился и готов принимать соединения.

Проверим где сейчас находится каталог данных кластера:

su - postgres -c 'psql -c "SHOW data_directory;"'

Вывод:

       data_directory
----------------------------
 /pgdata/postgresql/12/main
(1 row)

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

Удаляем старый каталог:

rm -rf /var/lib/postgresql/12/main.backup

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


Хотите оставить комментарий?