Контекст: система телефонии (Asterisk) с использованием API MySQL C для подключения к базе данных для поиска маршрутизации для вызова, когда он приходит. Поиск включает в себя подключение к базе данных, выполнение запроса, а затем закрытие соединения.
Иногда первый звонок утром вызывает следующую ошибку:
Доступ запрещен для пользователя 'asterisk'@'127.0.0.1' (с использованием пароля: ДА)
Обычно это означает, что пароль был неправильным, но, очевидно, это не так, поскольку он все время использует один и тот же пароль и пароль для всех вызовов. Это как если бы система каким-то образом "ушла спать" или, возможно, файл-дескриптор где-то застрял, так что первая попытка подключения к базе данных не удалась, но все остальное отлично работает. Также это случается только иногда, поэтому я не могу воспроизвести его - очень странно!
Я использую Asterisk 1.8.32 с MySQL 5.5 на Debian 8.7.
Это немного голова, поэтому я был бы благодарен за любые предложения!
Прежде всего, это очень плохая идея использовать 1,8. * Дерево в настоящий момент из-за функции безопасности.
Перейдите к 11. * исправьте эту проблему.
Также вы можете сделать следующее в my.cnf
interactive_timeout=
Установите любое значение более 4 дней (выходные)
Другой вариант - перезагрузить модуль mysql crontab каждые 3 часа.
Лучшим вариантом (кроме обновления) является переход от mysql к res_odbc, у которого есть опция keepalive. res_config_mysql считается устаревшим, поэтому любые новые системы должны использовать ODBC.