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

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

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

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.

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