Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

ODBC_CONNECT_FAIL IP-Телефония и СКУД

Asterisk: SQL Connect - Connection to database driver failed (Ошибки res_odbc)

Обновлено: 24.08.2026 · Официальная документация ↗
  • В журнале Asterisk фиксируется WARNING[1234]: res_odbc.c: SQL Connect: Connection to database driver failed for [asterisk_connector].
  • Ошибка res_odbc.c: res_odbc: could not connect to asterisk_connector.
  • Перестает работать Realtime-архитектура, запись CDR/CEL в базу данных и хранение SIP-пиров.
  • Команда odbc show в CLI выводит статус Disconnected.

1. Проверка системного соединения через isql

isql -v asterisk_connector db_user db_password

Если isql возвращает ошибку [ISQL]ERROR: Could not SQLConnect, проблема в файлах конфигурации odbc.ini или odbcinst.ini.

2. Проверка конфигурации драйвера /etc/odbcinst.ini

[MySQL]
Description = MySQL driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
CPTimeout = 
CPReuse = 

[PostgreSQL]
Description = PostgreSQL driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so

3. Конфигурация DSN источника данных в /etc/odbc.ini

[asterisk_connector]
Description = Asterisk Database
Driver = MySQL
Server = 127.0.0.1
Port = 3306
Database = asterisk_db
User = asterisk_user
Password = StrongDBPassword123
Socket = /var/run/mysqld/mysqld.sock
Option = 3
Charset = utf8mb4

4. Конфигурация res_odbc.conf в Asterisk

Откройте /etc/asterisk/res_odbc.conf:

[asterisk_connector]
enabled => yes
dsn => asterisk_connector
username => asterisk_user
password => StrongDBPassword123
poolconnections => 5
maxconnections => 20
pre-connect => yes
connect_timeout => 5
negative_connection_cache => 300

5. Перезагрузка модуля res_odbc

asterisk -rx "module reload res_odbc.so"
asterisk -rx "odbc show"
💡 Практика специалистов: При подключении к MySQL/MariaDB через ODBC всегда указывайте Server = 127.0.0.1 вместо localhost, чтобы драйвер unixODBC не пытался переключиться на ненадежный механизм именованных пайпов.

Частые вопросы (FAQ)

Почему isql работает, а Asterisk не подключается к ODBC?

Asterisk работает от непривилегированного пользователя (asterisk), у которого может не быть прав на чтение /etc/odbc.ini, /etc/odbcinst.ini или доступ к сокету БД (/var/run/mysqld/mysqld.sock).

Что делает параметр pre-connect => yes?

Он заставляет Asterisk поднимать постоянный пул TCP-сессий к базе данных сразу при старте модуля, предотвращая лаги и задержки при обработке первых входящих звонков.

Зачем нужен параметр Option = 3 в odbc.ini для MySQL?

Флаг Option = 3 включает режим безопасного переподключения (CLIENT_FOUND_ROWS | CLIENT_INTERACTIVE), предотвращая падение драйвера при закрытии сессии со стороны СУБД.

Как проверить, не заблокирован ли порт БД сетевым экраном?

Проверьте доступность сокета: nc -zvw3 127.0.0.1 3306 или telnet 127.0.0.1 3306.

Полезные материалы
Рекомендуем