Как изменить местоположение базы данных PostgreSQL в Linux

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При эксплуатации СУБД PostgreSQL на серверах под управлением ОС Linux часто возникает необходимость вынести файлы данных на отдельный физический диск или раздел. Это позволяет разнести системные файлы, журналы транзакций и саму базу данных по разным накопителям, что значительно повышает производительность системы. Рассмотрим наиболее эффективные способы решения этой задачи.

Способ 1: Изменение параметра data_directory в конфигурационном файле

Этот метод является наиболее прямым и подходит, когда необходимо перенести весь кластер баз данных целиком. Разберем его пошагово:

  1. Остановите службу postgresql, чтобы избежать повреждения данных: service postgresql stop.
  2. Скопируйте все содержимое текущей директории данных (например, /var/lib/postgresql/9.4/main) в новую целевую директорию, сохранив все права доступа и владельцев.
  3. Откройте файл конфигурации postgresql.conf (обычно он находится по пути /etc/postgresql/версия/main/postgresql.conf).
  4. Найдите и измените значение параметра data_directory, указав путь к новой папке.
  5. Отредактируйте файл запуска (например, postmaster.opts), если в нем жестко прописаны старые пути, указав новые директории.
  6. Установите правильные права на новую директорию: владелец должен быть postgres, а права доступа 0700. Используйте команды chown -R postgres:postgres /путь/к/новой/директории и chmod 0700 -R /путь/к/новой/директории.
  7. Запустите службу: service postgresql start.

Способ 2: Использование символических ссылок

Этот способ позволяет «обмануть» СУБД, создав ссылку на новый диск. Это удобно, если вы хотите вынести отдельные компоненты, например, логи транзакций pg_xlog.

Выполните следующие действия:

  1. Остановите сервер postgresql.
  2. Переместите нужный каталог на новый диск: mv /var/lib/pgsql/data/pg_xlog /mnt/hdd2/pg_xlog.
  3. Создайте символическую ссылку: ln -s /mnt/hdd2/pg_xlog /var/lib/pgsql/data/pg_xlog.
  4. Убедитесь, что владелец ссылки — пользователь postgres, и запустите службу.

Способ 3: Использование Tablespaces (Табличных пространств)

Это самый профессиональный способ управления размещением данных в PostgreSQL. Он позволяет не переносить весь кластер, а выбирать место хранения для конкретной базы данных или даже таблицы.

Для реализации этого метода:

  1. Создайте на целевом диске каталог и назначьте его владельцем пользователя postgres.
  2. Подключитесь к базе через psql или pgAdmin.
  3. Выполните SQL-команду создания пространства: CREATE TABLESPACE my_tablespace LOCATION '/путь/к/новому/каталогу';
  4. При создании новой базы данных указывайте созданное пространство: CREATE DATABASE my_new_db TABLESPACE my_tablespace;

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

Важные рекомендации по безопасности и системе

При переносе данных важно учитывать настройки безопасности ОС, такие как SELinux или AppArmor. Даже при корректной установке прав доступа chown, службы безопасности могут блокировать доступ PostgreSQL к новым путям. Всегда проверяйте логи /var/log/postgresql/ при возникновении ошибок доступа.

Также, если вы используете systemd для управления службами, при изменении data_directory рекомендуется создать override файл для юнита службы через systemctl edit postgresql. Это обеспечит корректную работу скриптов инициализации системы при загрузке сервера.

Помните: разделение нагрузки на разные физические диски — это лучший способ повысить отзывчивость системы 1С, работающей на PostgreSQL!

← На главную