Asterisk: MySQL Realtime table structure out of date (Ошибки res_config_mysql)
- В журнале Asterisk фиксируется
WARNING[3456]: res_config_mysql.c: MySQL Realtime: Table ps_endpoints structure is out of date. - Asterisk не может прочитать конфигурацию абонентов или транков из базы данных в режиме реального времени (Realtime).
- При создании новых PJSIP эндпоинтов в базе данных CLI сообщает
Endpoint not found. - Ошибки отсутствия обязательных полей (Missing column) при запросах
SELECT * FROM ps_endpoints.
1. Диагностика Realtime движка в Asterisk CLI
asterisk -rx "realtime show status"
asterisk -rx "realtime load ps_endpoints id 101"2. Применение официальных миграций Alembic (Рекомендуемый способ)
Asterisk поставляет встроенный механизм миграций схемы БД через утилиту alembic:
# Установка alembic
pip3 install alembic mysqlclient
# Переход в директорию скриптов Asterisk
cd /usr/src/asterisk/contrib/ast-db-manage
# Настройка подключения к БД
cp config.ini.sample config.ini
nano config.ini
# sqlalchemy.url = mysql://asterisk_user:password@localhost/asterisk_db
# Применение всех актуальных миграций до текущей версии ядра
alembic -c config.ini upgrade head3. Ручное добавление недостающих полей для PJSIP Realtime
Если Alembic недоступен, добавьте недостающие столбцы вручную через SQL:
ALTER TABLE ps_endpoints ADD COLUMN incoming_mwi_mailbox VARCHAR(40) DEFAULT NULL;
ALTER TABLE ps_endpoints ADD COLUMN bundle VARCHAR(10) DEFAULT NULL;
ALTER TABLE ps_endpoints ADD COLUMN max_audio_streams INT DEFAULT 1;
ALTER TABLE ps_endpoints ADD COLUMN max_video_streams INT DEFAULT 1;4. Конфигурация связки sorcery.conf и extconfig.conf
Убедитесь, что в /etc/asterisk/extconfig.conf указан правильный драйвер (рекомендуется res_config_odbc вместо устаревшего res_config_mysql):
[settings]
ps_endpoints => odbc,asterisk_connector,ps_endpoints
ps_auths => odbc,asterisk_connector,ps_auths
ps_aors => odbc,asterisk_connector,ps_aors
ps_contacts => odbc,asterisk_connector,ps_contacts5. Перезагрузка подсистем
asterisk -rx "module reload res_odbc.so"
asterisk -rx "pjsip reload" Частые вопросы (FAQ)
Почему модуль res_config_mysql считается устаревшим (deprecated)?
Драйвер res_config_mysql не поддерживает современные возможности PJSIP Sorcery и пулы коннектов. В современных релизах Asterisk стандартном де-факто является связка res_config_odbc + unixODBC.
Что такое Alembic в контексте Asterisk?
Alembic — это инструмент версионирования и автоматической миграции схемы реляционных БД для Asterisk, позволяющий безопасно обновлять таблицы Realtime между мажорными версиями.
Как проверить, какие именно поля отсутствуют в таблице?
Выполните команду realtime load <table_name> <keyfield> <value> в CLI Asterisk. В логах messages появится точный список ненайденных столбцов.
Нужно ли перезапускать Asterisk после изменения записей в Realtime таблицах?
Нет. Realtime архитектура считывает данные из БД непосредственно в момент поступления SIP-запроса без необходимости вызова reload.