При эксплуатации СУБД PostgreSQL на серверах под управлением ОС Linux часто возникает необходимость вынести файлы данных на отдельный физический диск или раздел. Это позволяет разнести системные файлы, журналы транзакций и саму базу данных по разным накопителям, что значительно повышает производительность системы. Рассмотрим наиболее эффективные способы решения этой задачи.
data_directory в конфигурационном файлеЭтот метод является наиболее прямым и подходит, когда необходимо перенести весь кластер баз данных целиком. Разберем его пошагово:
postgresql, чтобы избежать повреждения данных: service postgresql stop./var/lib/postgresql/9.4/main) в новую целевую директорию, сохранив все права доступа и владельцев.postgresql.conf (обычно он находится по пути /etc/postgresql/версия/main/postgresql.conf).data_directory, указав путь к новой папке.postmaster.opts), если в нем жестко прописаны старые пути, указав новые директории.postgres, а права доступа 0700. Используйте команды chown -R postgres:postgres /путь/к/новой/директории и chmod 0700 -R /путь/к/новой/директории.service postgresql start.Этот способ позволяет «обмануть» СУБД, создав ссылку на новый диск. Это удобно, если вы хотите вынести отдельные компоненты, например, логи транзакций pg_xlog.
Выполните следующие действия:
postgresql.mv /var/lib/pgsql/data/pg_xlog /mnt/hdd2/pg_xlog.ln -s /mnt/hdd2/pg_xlog /var/lib/pgsql/data/pg_xlog.postgres, и запустите службу.Tablespaces (Табличных пространств)Это самый профессиональный способ управления размещением данных в PostgreSQL. Он позволяет не переносить весь кластер, а выбирать место хранения для конкретной базы данных или даже таблицы.
Для реализации этого метода:
postgres.psql или pgAdmin.
CREATE TABLESPACE my_tablespace LOCATION '/путь/к/новому/каталогу';
CREATE DATABASE my_new_db TABLESPACE my_tablespace;
Этот метод предпочтителен, так как он не требует остановки сервера и изменения глобальных настроек кластера.
При переносе данных важно учитывать настройки безопасности ОС, такие как SELinux или AppArmor. Даже при корректной установке прав доступа chown, службы безопасности могут блокировать доступ PostgreSQL к новым путям. Всегда проверяйте логи /var/log/postgresql/ при возникновении ошибок доступа.
Также, если вы используете systemd для управления службами, при изменении data_directory рекомендуется создать override файл для юнита службы через systemctl edit postgresql. Это обеспечит корректную работу скриптов инициализации системы при загрузке сервера.
Помните: разделение нагрузки на разные физические диски — это лучший способ повысить отзывчивость системы 1С, работающей на PostgreSQL!