Как настроить подключение к внешнему источнику данных MySQL через ODBC на сервере 1С под Linux

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

При работе сервера 1С на операционных системах семейства Linux (например, CentOS или Ubuntu) часто возникает задача интеграции с внешними базами данных, такими как MySQL. Использование механизма Внешних источников данных требует предварительной настройки драйверов ODBC. Однако стандартная ситуация, когда системная утилита isql успешно подключается к базе, а 1С выдает ошибку Can't connect to MySQL server on 'localhost', ставит многих разработчиков в тупик. Рассмотрим подробно, как правильно настроить окружение и устранить эту проблему.

Разберем структуру конфигурационных файлов ODBC

Первым делом проанализируем, как организованы файлы настроек в Linux. В системе обычно присутствуют два ключевых файла: /etc/odbcinst.ini и /etc/odbc.ini. Часто ошибка кроется в том, что параметры конкретного подключения прописываются не в том файле. Выясним разницу:

Если мы посмотрим на типичную ошибку в конфигурации, то увидим, что параметры 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).

Выясним причину ошибки Can't connect to MySQL server on 'localhost'

Проанализируем ситуацию: почему 1С пытается подключиться к localhost, если в настройках указан IP-адрес внешнего сервера? Рассмотрим несколько причин:

  1. Неправильное имя DSN: Если в строке подключения 1С указано имя, которое не найдено в odbc.ini, драйвер MySQL по умолчанию пытается найти локальный сокет.
  2. Проблемы с правами доступа: Сервер 1С работает под учетной записью usr1cv8. Если у этого пользователя нет прав на чтение файлов /etc/odbc.ini или /etc/odbcinst.ini, 1С «не видит» настройки и использует значения по умолчанию.
  3. Переменные окружения: Процесс сервера 1С может не знать, где лежат конфигурационные файлы ODBC.

Настройка окружения сервера 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С у нас есть два пути. Разберем каждый из них по шагам.

Способ 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С. Для программного контроля параметров подключенного источника можно использовать способ узнать строку соединения внешнего источника данных.

Учет влияния SELinux

Если вы используете CentOS или RedHat, не забудьте проверить настройки SELinux. Даже при идеальной конфигурации ODBC, защитная подсистема может блокировать сетевые соединения для процессов сервера 1С. Для проверки временно переведем SELinux в режим аудита:

setenforce 0

Если после этой команды подключение в 1С заработало, необходимо настроить соответствующее разрешение или оставить режим Permissive для процессов 1С.

Таким образом, мы рассмотрели комплексный подход к решению проблемы подключения. Основной секрет кроется в строгом разделении ответственности между файлами odbcinst.ini и odbc.ini, обеспечении прав доступа для пользователя usr1cv8 и корректном указании имени драйвера в строке соединения 1С. Если же требуется настроить интеграцию в пользовательском режиме без написания кода, подойдёт подсистема выгрузки данных во внешнюю базу SQL.

← На главную