Это продолжение статьи Ставим 1С 8.3 32-bit на Debian 9 64-bit.
Будем устанавливать PostgreSQL 9.6.6 на Debian 9 и настраивать для хранения баз 1С.
Использовались материалы:
Установка и настройка postgresql на debian 8 для работы с 1С
Сборка от PostgresPro для платформы 1С под Linux и Windows (для коммерческих целей платно)
Tuning Your PostgreSQL Server (на офф.сайте без перевода)
Оптимизация работы PostgreSQL (описание параметров)
Лучшие практики по настройке PostgreSQL от gilev.ru (внизу)
О патче от 1С для PostgreSQL
PGTune – автоподбор параметров PostgreSQL по параметрам железа
Решение проблем при использовании “1c предприятие” 8.2 в Linux
Типовые ошибки установки сервера 1С:Предприятие и PostgreSQL на платформе Linux
Перед установкой
Для корректной работы дистрибутивов 1С, кластер PostgreSQL должен быть инициализирован с локалью ru_RU.UTF-8. Если при инициализации кластера локаль явно не задана, то кластер будет инициализирован с локалью, установленной в системе по умолчанию. C помощью утилит locale(Linux) и systeminfo(Windows) можно узнать значение локали, установленное по умолчанию (postgrespro плохого не посоветует).
Необходимо, чтобы в системе были 2 локали: en_US.UTF-8 и ru_RU.UTF-8. Вторую нужно сделать по-умолчанию:
1 |
$ dpkg-reconfigure locales |
Проверить список установленных локалей:
1 |
$ locale -a |
Устанавливаем необходимые пакеты:
1 |
$ apt-get install ssl-cert libossp-uuid16 libxslt1.1 |
Устанавливаем вручную еще один пакет (полнофункциональная поддержка Unicode и локали):
1 2 |
$ wget http://ftp.ru.debian.org/debian/pool/main/i/icu/libicu48_4.8.1.1-12+deb7u3_amd64.deb $ dpkg -i libicu48*.deb |
Устанавливаем в ядре параметр kernel.shmmax – это максимальный размер разделяемой памяти (в байтах). Каким он должен быть – нигде толком не написано, и даже на странице документации postgreSQL 9.6 Managing Kernel Resources написано всего-лишь, что он должен быть “не менее 1 кБ (больше, если выполняется много копий сервера)”. Ясно лишь, что в 32-разрядной системе нужно всегда устанавливать 4294967295).
Для наших 64Гб ОЗУ установим 32Гб под shmmax, хз насколько это будет правильно. 32Гб*1024*1024*1024=34359738368 байт.
а) Добавляем в /etc/sysctl.conf:
1 2 |
$ nano /etc/sysctl.conf kernel.shmmax=34359738368 |
Применяем внесенное изменение
1 |
$ sysctl -p |
ИЛИ б)
1 |
$ echo 34359738368 > /proc/sys/kernel/shmmax |
Проверяем внесенные изменения:
1 |
$ cat /proc/sys/kernel/shmmax |
Установка
Скачать дистрибутив можно:
1) От Etersoft (на данный момент последняя версия 9.2)
2) От PostgresPRO (на данный момент последняя версия 11.5.4)
3) От самой 1С (на данный момент последняя версия 10.9-5.1C)
На момент написания ставил версию от PostgrePRO 9.6, но на данный момент у них, судя по всему, изменились правила лицензирования, и для свободного использования доступна лишь версия Postgres Pro Standard “для тестирования, разработки ПО, ознакомления с функциональностью СУБД, использования в образовательном процессе”.
1 2 3 4 5 6 7 |
$ apt-get update -y $ apt-get install -y wget gnupg2 $ wget -O - http://1c.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO-1C | apt-key add - $ echo deb http://1c.postgrespro.ru/archive/2018_03_02/deb stretch main > /etc/apt/sources.list.d/postgrespro-1c.list $ apt-get update -y $ apt-get install -y postgresql-pro-1c-9.6 $ apt-get -f install - (возможно) установить неудовлетворенные зависимости |
Возможно, понадобятся отдельно либы (сейчас не припомню точный процесс установки):
– libssl1.0.0 (в репозитории deb http://ftp.de.debian.org/debian jessie main)
– postgresql-client-common, postgresql-common
– libicu55 (38/48/52/55)
Для изменения каталога хранения баз:
а) В postgresql.conf меняем data_directory на свое:
1 2 |
$ nano /etc/postgresql/9.6/main/postgresql.conf data_directory = 'new_data_directory' |
ИЛИ
б) Перемещаем папку и создаем симлинк:
1 2 |
$ mv -r /var/lib/postgresql/9.6/main <new_data_directory> $ ln -s <new_data_directory/main> /var/lib/postgresql/9.6/ |
Новой папке указываем права:
1 2 |
$ chown -R postgres:postgres <new_data_directory> $ chmod 700 <new_data_directory> |
Добавляем в автозагрузку и запускаем:
1 2 |
$ systemctl enable postgresql $ systemctl start postgresql |
Ограничим доступ к СУБД только внутри машины и, если нужно, с определенного сетевого интерфейса (для удаленного pgAdmin):
1 2 |
$ nano /etc/postgresql/9.6/main/postgresql.conf listen_addresses = 'localhost,network_interface_ip' |
Меняем пароль внутреннего пользователя БД postgres:
1 2 3 |
$ su postgres $ psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'PASSWORD';" $ su - (или CTRL+D) |
Откроем локальный доступ с учетки postgres в файле pg_hba.conf:
1 2 3 |
$ nano /etc/postgresql/9.6/main/pg_hba.conf # столбцы host,database,user,auth-method local all postgres trust |
Перезагрузим это все безобразие:
1 |
$ service postgresql restart |
Настройка
Подробное описание параметров для оптимизации работы postgreSQL написано, например, тут:
Tuning Your PostgreSQL Server (на офф.сайта без перевода)
Оптимизация работы PostgreSQL (описание параметров)
Лучшие практики по настройке PostgreSQL от gilev.ru (внизу)
Я не стал переписывать тоже самое.
Есть подбор параметров на pgtune.leopard.in.ua, но насколько он верный не могу судить.
Получить установленные параметры:
1 2 3 |
$ su postgres $ psql $ select name, setting, unit from pg_settings where context = 'postmaster'; |
Тест postgreSQL:
1 2 |
$ cd /usr/lib/postgresql/9.6/bin $ ./pg_test_fsync |
Управление:
1 2 3 4 5 6 7 8 |
$ su postgres # список баз $ psql -l $ psql # удалить базу $> dropdb <dbname> # посмотреть объем базы данных $> select pg_database_size('<dbname>'); |
Логи:
/var/lib/postgresql/9.6/main/pg_log/
pg_log
– является по-умолчанию местом, где хранятся журналы деятельности
pg_xlog
– это место, где хранится журнал транзакций. Нельзя удалять
pg_clog
– содержит журналы метаданных транзакций. Нельзя удалять
Бэкапы
Для создания резервной копии определенной базы:
1 |
$ pg_dump <dbname> > <db.out> |
Возможные параметры:
-d имя базы данных для выгрузки
-n schema
-t table
-a -> выгрузить только данные, без схемы
-s -> выгрузить только схему, без данных
-h host
-p port
-U user
-f name|folder -> имя выходного файла или каталога
-j num -> обработка нескольких таблиц параллельно (num – число заданий)
-Z 0-9 -> уровень сжатия при архивации
-F c|d|t|p -> формат выводимых данных (пользовательский | каталог | tar | текстовый (по умолчанию))
-Fc -> сжатие (если установлена zlib).
Для бэкапа всего кластера (вместе со всеми базами, группами, пользователями, правами доступа):
1 |
$ pg_dumpall > <db.out> |
Восстановление базы:
1)
$ psql <dbname> < <db.out>
2)
$ psql -f <db.out> <dbname>
3)
$ pg_restore -d <db.out> <dbname> (если бэкап создан с помощью pg_dump)
Использование параметра -f
немного отличается от psql <
. В основном, оба варианта будут делать то, что вы ожидаете, но с filename
-f
доступны некоторые полезные свойства, такие как сообщения об ошибках с номерами строк. Также есть небольшая вероятность, что запуск в таком режиме будет быстрее.
Возможные проблемы
1) Ошибка:
В логах /var/log/postgresql/postgresql-9.6-main.log:
"ВАЖНО: нет доступа к файлу "online_analyze": Нет такого файла или каталога
СООБЩЕНИЕ: система БД выключена"
Решение:
Пакеты postgresql обновились до 9.6.7, а конфиг старый. Откатился до версии 9.6.6 (переустановил из .deb пакеты server,client,contrib)
2) Ошибка:
"Ошибка СУБД:ERROR: could not access file "$libdir/fasttrun"
Решение:
Нужно установить пакет postgresql-contrib