При работе сервера 1С на операционных системах семейства Linux (например, CentOS или Ubuntu) часто возникает задача интеграции с внешними базами данных, такими как MySQL. Использование механизма Внешних источников данных требует предварительной настройки драйверов ODBC. Однако стандартная ситуация, когда системная утилита isql успешно подключается к базе, а 1С выдает ошибку Can't connect to MySQL server on 'localhost', ставит многих разработчиков в тупик. Рассмотрим подробно, как правильно настроить окружение и устранить эту проблему.
Первым делом проанализируем, как организованы файлы настроек в Linux. В системе обычно присутствуют два ключевых файла: /etc/odbcinst.ini и /etc/odbc.ini. Часто ошибка кроется в том, что параметры конкретного подключения прописываются не в том файле. Выясним разницу:
.so.Если мы посмотрим на типичную ошибку в конфигурации, то увидим, что параметры Server, User и Password ошибочно вносятся в odbcinst.ini. Разберем, как должны выглядеть правильно настроенные файлы.
Пример корректного /etc/odbcinst.ini:
[MySQL ODBC 8.0 Unicode Driver]
Description = ODBC for MySQL, Unicode
Driver = /usr/lib64/libmyodbc8w.so
FileUsage = 1
Пример корректного /etc/odbc.ini:
[MySQL_Test]
Description = Test connection to MySQL
Driver = MySQL ODBC 8.0 Unicode Driver
Server = 192.168.1.100
Port = 3306
Database = work_db
User = remote_user
Password = secret_password
Character_set = utf8mb4
Обратите внимание: в odbc.ini в поле Driver мы указываем название секции из файла odbcinst.ini, заключенное в квадратные скобки (в данном примере — MySQL ODBC 8.0 Unicode Driver).
Проанализируем ситуацию: почему 1С пытается подключиться к localhost, если в настройках указан IP-адрес внешнего сервера? Рассмотрим несколько причин:
odbc.ini, драйвер MySQL по умолчанию пытается найти локальный сокет.usr1cv8. Если у этого пользователя нет прав на чтение файлов /etc/odbc.ini или /etc/odbcinst.ini, 1С «не видит» настройки и использует значения по умолчанию.Для того чтобы 1С могла корректно считывать настройки ODBC, нам необходимо убедиться, что пользователю usr1cv8 доступны нужные переменные окружения. Проанализируем, как это сделать в современных дистрибутивах Linux с использованием systemd.
Выполним команду редактирования сервиса:
systemctl edit srv1cv83
В открывшемся файле добавим следующие строки в секцию [Service]:
Environment=ODBCINI=/etc/odbc.ini
Environment=ODBCSYSINI=/etc
После этого необходимо перезагрузить конфигурацию демонов и сам сервер 1С:
systemctl daemon-reload
systemctl restart srv1cv83
Рассмотрим важный аспект: права доступа. Убедимся, что файлы доступны для чтения всем пользователям системы:
chmod 644 /etc/odbc.ini
chmod 644 /etc/odbcinst.ini
Также крайне важно проверить, все ли необходимые библиотеки установлены в системе для работы самого драйвера. Воспользуемся утилитой ldd для проверки зависимостей драйвера MySQL:
ldd /usr/lib64/libmyodbc8w.so
Если в выводе команды вы увидите строки со значением not found, значит в системе отсутствуют необходимые пакеты (например, старые версии libssl), и подключение через 1С не заработает, даже если isql функционирует.
При создании Внешнего источника данных в конфигураторе 1С у нас есть два пути. Разберем каждый из них по шагам.
Способ 1: Использование DSN. В этом случае мы ссылаемся на имя, созданное в odbc.ini. Строка подключения будет предельно простой:
DSN=MySQL_Test;
Важно помнить, что логин и пароль в этом случае должны быть либо прописаны в odbc.ini, либо указаны в соответствующих полях в параметрах внешнего источника данных в 1С.
Способ 2: DSN-less подключение (без использования файла odbc.ini). Этот метод часто более надежен, так как параметры передаются напрямую драйверу. Строка подключения должна выглядеть так:
DRIVER={MySQL ODBC 8.0 Unicode Driver};Server=192.168.1.100;Port=3306;Database=work_db;User=remote_user;Password=secret_password;Option=3;
Внимание: Название драйвера в фигурных скобках {} должно в точности до каждого символа совпадать с заголовком секции в вашем файле odbcinst.ini. Использование Unicode-драйвера (с индексом w в названии файла libmyodbc8w.so) является обязательным для корректной передачи кириллицы в 1С. Для программного контроля параметров подключенного источника можно использовать способ узнать строку соединения внешнего источника данных.
Если вы используете CentOS или RedHat, не забудьте проверить настройки SELinux. Даже при идеальной конфигурации ODBC, защитная подсистема может блокировать сетевые соединения для процессов сервера 1С. Для проверки временно переведем SELinux в режим аудита:
setenforce 0
Если после этой команды подключение в 1С заработало, необходимо настроить соответствующее разрешение или оставить режим Permissive для процессов 1С.
Таким образом, мы рассмотрели комплексный подход к решению проблемы подключения. Основной секрет кроется в строгом разделении ответственности между файлами odbcinst.ini и odbc.ini, обеспечении прав доступа для пользователя usr1cv8 и корректном указании имени драйвера в строке соединения 1С. Если же требуется настроить интеграцию в пользовательском режиме без написания кода, подойдёт подсистема выгрузки данных во внешнюю базу SQL.