Эта проблема напрямую связана с ошибкой Akonadi #283682, которая вызывает проблемы с KMail с октября 2011 года. Существует проблема синхронизации и координации в асинхронной обработке фильтров писем. Время от времени правило фильтрации, по которым письма перемещаются в другие папки, «подвисает» и создаёт несколько записей в базе данных для письма, которое требуется переместить. При попытке открытия второй копии такого письма появляется сообщение о том, что «Невозможно получить запись из модуля обработки ... [LRCONFLICT]». Подобное фантомное сообщение невозможно переместить в корзину или удалить с помощью встроенных функций KMail, но избавиться от него всё же возможно. Далее представлен способ, позволяющий сделать это.
Для начала закройте KMail. Возможно, в этом нет необходимости, но лучше предотвратить нежелательные последствия.
С помощью
akonadictlвозможно узнать, сколько сообщений повреждено.~ $ akonadictl fsck 2 >&1 | grep ^Found Found 6 external files. Found 6 external parts. Found no unreferenced external files. Found 0 parts to be moved to external files Found 0 parts to be moved to database Found 6 collections without RID. Found 9 items without RID. Found 0 dirty items.
В этом экземпляре найдено девять дублирующихся элементов (без RID).
Необходимо знать, как напрямую подключаться к серверу mysql. Чтобы это сделать, воспользуйтесь командами
psиgrep.~ $ ps ux | grep mysql david 8788 0.2 0.9 3736292 153936 ? Sl 06:45 0:16 /usr/sbin/mysqld --defaults-file=/home/david/.local/share/akonadi/mysql.conf --datadir=/home/david/.local/share/akonadi/db_data/ --socket=/run/user/1000/akonadi/mysql.socket --pid-file=/run/user/1000/akonadi/mysql.pid david 24275 0.0 0.0 8056 2144 pts/1 S+ 08:24 0:00 grep --colour=auto mysql
Вызовите программу-сервер mysql с помощью данных сокета, полученных на шаге 3, и введите три команды mysql, представленные ниже.
~ $ mysql --socket=/run/user/1000/akonadi/mysql.socket <== Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 114 Server version: 10.5.10-MariaDB Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> use akonadi; <== Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [akonadi]> delete from pimitemtable where remoteid is NULL; <== Query OK, 9 rows affected (0.003 sec) MariaDB [akonadi]> \q <== Bye
Этими тремя командами mysql являются «use akonadi;», «delete from pimitemtable where remoteid is NULL;» и «\q». После команды «mysql --socket= ...» откроется диалог с сервером mysql (или «MariaDB»), который покажет запрос относительно команды — >. Здесь представлен весь диалог. Введённые пользователем строки обозначены символами «<==».
После перезапуска KMail эти сообщения-дубликаты исчезнут. Они были лишь фантомами, вызванными NULL-указателями в таблицах базы данных mysql.