Сейчас возможно ситуация, когда попытка записи 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, и файл с данными не будет удален.