PDOException: SQLSTATE[HY000]: General error: 11 database disk image is malformed

,

Примерно каждые 5 сек в системном логе messages появляется ошибка.

Jan 17 23:21:21 daemon.err php.backend[18226]:  PDOException: SQLSTATE[HY000]: General error: 11 database disk image is malformed in file /storage/usbdisk1/mikopbx/c
ustom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php on line 540
Jan 17 23:21:21 daemon.err php.backend[18226]:  Stack trace:
Jan 17 23:21:21 daemon.err php.backend[18226]:    1. PDOException->() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php:540
Jan 17 23:21:21 daemon.err php.backend[18226]:    2. Phalcon\Mvc\Model->find() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php
:540
Jan 17 23:21:21 daemon.err php.backend[18226]:    3. Modules\ModuleBitrix24Integration\bin\ConnectorDb->deletePhoneContact() /storage/usbdisk1/mikopbx/custom_modules
/ModuleBitrix24Integration/bin/ConnectorDb.php:591
Jan 17 23:21:21 daemon.err php.backend[18226]:    4. Modules\ModuleBitrix24Integration\bin\ConnectorDb->updateEntContact() /storage/usbdisk1/mikopbx/custom_modules/M
oduleBitrix24Integration/bin/ConnectorDb.php:153
Jan 17 23:21:21 daemon.err php.backend[18226]:    5. Modules\ModuleBitrix24Integration\bin\ConnectorDb->onEvents() /offload/rootfs/usr/www/src/Core/System/BeanstalkC
lient.php:369
Jan 17 23:21:21 daemon.err php.backend[18226]:    6. call_user_func() /offload/rootfs/usr/www/src/Core/System/BeanstalkClient.php:369
Jan 17 23:21:21 daemon.err php.backend[18226]:    7. MikoPBX\Core\System\BeanstalkClient->wait() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/b
in/ConnectorDb.php:100
Jan 17 23:21:21 daemon.err php.backend[18226]:    8. Modules\ModuleBitrix24Integration\bin\ConnectorDb->start() /offload/rootfs/usr/www/src/Core/Workers/WorkerBase.p
hp:151
Jan 17 23:21:21 daemon.err php.backend[18226]:    9. MikoPBX\Core\Workers\WorkerBase->startWorker() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integratio
n/bin/ConnectorDb.php:735
Jan 17 23:21:21 daemon.err php.backend[18226]:   on MikoPBX\Common\Handlers\CriticalErrorsHandler::handleExceptionWithSyslog

Затрудняюсь сказать, когда это началось.
Модуль интеграции с Битрикс24 подключали осенью.
В целом станция работает.
Но звонки из битрикса срабатывают с задержкой в 20сек, а из 1С моментально.
Какую БД он не может открыть?

Нужно проверить диск на ошибки
Сделать это можно из консольного меню (пункт 6)
Перед проверкой обязательно выполнить резервное копирование (или снэпшот).

Дополнительно можно выполнить восстановление базы данных модуля

# Создаем дамп базы данных модуля
sqlite3 /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db .dump > /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db.dmp
# Восстанавливаем дамп в новую базу данных
sqlite3 /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.new < /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db.dmp
# Чистим старые файлы 
rm -rf /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db*
# Восстанавливаем базу данных
mv /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db.new /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db
# Перезагружаем АТС
reboot;

На восстановлении из дампа выкидывает ошибки

# sqlite3 ./module.new < ./module.db.dmp
Runtime error near line 72562: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72563: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72564: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72565: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72566: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72567: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72568: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72569: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72593: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72594: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72595: UNIQUE constraint failed: m_B24PhoneBook.id (19)
Runtime error near line 72596: UNIQUE constraint failed: m_B24PhoneBook.id (19)

Можно ли восстановленный файл подставлять в систему?

В этой таблице хранится контактная книга Bitrix24, котактные телефоны клиентов, если какие то строки не удалось загрузить, при поступлении звонка может не сработать функция “Перехват на ответственного” по некоторым клиентам.

Можно попробовать указанные “line 72XXX” загрузить вручную, найдя эти строки в файле module.db.dmp

nano +72562 module.db.dmp

Но перед загрузкой нужно чистить поле id в запросе.

Оказалось по содержанию, что в дампе задублировалось 12 строк, вызывающих нарушение уникальности ключа. Я их удалил, новый файл из дампа сформировался без ошибок.
Подменил файл module.db и включил обратно модуль интеграции.
Однако теперь ошибка выглядит так:

Jan 28 14:18:34 daemon.err php.backend[6259]:  PDOException: SQLSTATE[HY000]: General error: 5 cannot open savepoint - SQL statements in progress in file /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php on line 540
Jan 28 14:18:34 daemon.err php.backend[6259]:  Stack trace:
Jan 28 14:18:34 daemon.err php.backend[6259]:    1. PDOException->() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php:540
Jan 28 14:18:34 daemon.err php.backend[6259]:    2. Phalcon\Mvc\Model\Resultset->delete() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php:540
Jan 28 14:18:34 daemon.err php.backend[6259]:    3. Modules\ModuleBitrix24Integration\bin\ConnectorDb->deletePhoneContact() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php:591
Jan 28 14:18:34 daemon.err php.backend[6259]:    4. Modules\ModuleBitrix24Integration\bin\ConnectorDb->updateEntContact() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php:153
Jan 28 14:18:34 daemon.err php.backend[6259]:    5. Modules\ModuleBitrix24Integration\bin\ConnectorDb->onEvents() /offload/rootfs/usr/www/src/Core/System/BeanstalkClient.php:369
Jan 28 14:18:34 daemon.err php.backend[6259]:    6. call_user_func() /offload/rootfs/usr/www/src/Core/System/BeanstalkClient.php:369
Jan 28 14:18:34 daemon.err php.backend[6259]:    7. MikoPBX\Core\System\BeanstalkClient->wait() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php:100
Jan 28 14:18:34 daemon.err php.backend[6259]:    8. Modules\ModuleBitrix24Integration\bin\ConnectorDb->start() /offload/rootfs/usr/www/src/Core/Workers/WorkerBase.php:151
Jan 28 14:18:34 daemon.err php.backend[6259]:    9. MikoPBX\Core\Workers\WorkerBase->startWorker() /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/bin/ConnectorDb.php:735
Jan 28 14:18:34 daemon.err php.backend[6259]:   on MikoPBX\Common\Handlers\CriticalErrorsHandler::handleExceptionWithSyslog

вот такой набор команд правит базу данных

rm -rf /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.new*

sqlite3 /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db .dump > /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db.dmp
sed -i 's/INSERT INTO/INSERT OR REPLACE INTO/g' /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db.dmp


sqlite3 /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.new < /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db.dmp
rm -rf /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db*
mv /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.new /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db

sqlite3 /storage/usbdisk1/mikopbx/custom_modules/ModuleBitrix24Integration/db/module.db vacuum

Это всё практически то же самое.
Начальство связалось с разработчиками Miko, специалист подключился удаленно, всё это проделал. Не помогло.

Было так:

Стало так: