Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

Asterisk: MySQL Realtime table structure out of date (Ошибки res_config_mysql)

Обновлено: 24.08.2026  ·  Официальная база знаний
  • В журнале 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 head

3. Ручное добавление недостающих полей для 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_contacts

5. Перезагрузка подсистем

asterisk -rx "module reload res_odbc.so"
asterisk -rx "pjsip reload"
Практический опыт инженера: Никогда не обновляйте мажорную версию Asterisk (например, с 18 на 20) без предварительного запуска alembic -c config.ini upgrade head, иначе расхождения в структуре ps_endpoints сломают регистрацию абонентов.

Частые вопросы (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.