Asterisk: SQL Connect - Connection to database driver failed (Ошибки res_odbc)
- В журнале 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.so3. Конфигурация 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 = utf8mb44. Конфигурация 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 => 3005. Перезагрузка модуля res_odbc
asterisk -rx "module reload res_odbc.so"
asterisk -rx "odbc show" Частые вопросы (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.