Сейчас возможно ситуация, когда попытка записи CDR в базу MySQL завершится ошибкой. Если эта ошибка связана с обрывом связи с MySQL, то попытка записи будет повторена после восстановления связи. Но если ошибку возвращается сама база (например, закончилось место, или какие то другие ограничения базы), то такая запись просто потеряется.
В рамках версии 3.14 был предусмотрен механизм защиты от потери данных при такой ситуации
- При невозможности записи данных создается файл
Файл создается по пути /var/lib/ecss/mysql-failed-requests/<MYSQL_SUBSYSTEM>/failed_requests.sql
В пределе на одну подсистему может быть создано до 10 файлов по 1Gb каждый.
- Добавлена команда CoCon-а для импорта файла с забекапленными SQL запросами:
cluster/core/<CORE_CLUSTER>/tts/db/reload-sql
cluster/core/<CORE_CLUSTER>/dialer/db/reload-sql
cluster/core/<CORE_CLUSTER>/teleconference/db/reload-sql
reload-sql [<OPTIONS>]
OPTION: DEFINITION:
MASK - маска SQL файлов, которые необходимо проимпортировать в SQL
Пример:
./reload-sql failed_requests.sql
Success: 147 request(s)
Failed: 10 request(s)
Failed requests was copied to file(s): filed_reexecute_requests_2020_02_06_10_42_28.sql
Если во время импорта какие-то из строк файла не удалось проимпортировать (например SQL ошибки), эти строки будут записаны в файл вида filed_reexecute_requests_YYYY_MM_DD_hh_mm_ss.sql
Если все строки удалось проимпортировать, файл создан не будет. После импорта исходный файл с данными удаляется (считается что все данные и так уже удалось залить в MySQL, либо неуспешные запросы будут проимпортированы в файл вида filed_reexecute_requests_YYYY_MM_DD_hh_mm_ss.sql). Если во время импорта были ошибки другого вида (например не удалось установить связь с MySQL, нет доступа до файла) команда выдаст warning, и файл с данными не будет удален.