KMail, Akonadi and MariaDB on ArchLinux

ArchLinux recently switched to MariaDB. After the complete system update, followed by the usual full recompile of Qt4 and KDE4, my KMail2 setup became unstable. While reading mails was still possible, I experienced lags when switching from one folder to another (“please wait while retrieving message contents”) and, more problematic, sending mails worked very¬†randomly.¬† I used the akonadi server configuration tool and it’s “test” feature to check my setup and then, surprise, I got errors with my database. OK, I thought, it’s time now to restart with a fresh home directory, as mine has several years, and configuration from previous setups was left, along my switch to ArchLinux then to custom compiled KDE4.

But with the new, fresh home directory, the “test” function still showed errors:

130605 0:10:50 InnoDB: The InnoDB memory heap is disabled
130605 0:10:50 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130605 0:10:50 InnoDB: Compressed tables use zlib 1.2.7
130605 0:10:50 InnoDB: Initializing buffer pool, size = 80.0M
130605 0:10:50 InnoDB: Completed initialization of buffer pool
130605 0:10:50 InnoDB: highest supported file format is Barracuda.
130605 0:10:50 InnoDB: Waiting for the background threads to start
130605 0:10:51 Percona XtraDB (http://www.percona.com) 5.5.30-MariaDB-30.1 started; log sequence number 2612486
130605 0:10:51 [Warning] Can't open and lock time zone table: Table 'mysql.time_zone_leap_second' doesn't exist trying to live without them
130605 0:10:51 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
130605 0:10:51 [ERROR] Native table 'performance_schema'.'events_waits_current' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'events_waits_history' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'events_waits_history_long' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'setup_consumers' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'setup_instruments' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'setup_timers' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'performance_timers' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'threads' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'events_waits_summary_by_thread_by_event_name' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'events_waits_summary_by_instance' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'events_waits_summary_global_by_event_name' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'file_summary_by_event_name' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'file_summary_by_instance' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'mutex_instances' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'rwlock_instances' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'cond_instances' has the wrong structure
130605 0:10:51 [ERROR] Native table 'performance_schema'.'file_instances' has the wrong structure
130605 0:10:51 [Note] /usr/bin/mysqld: ready for connections.
Version: '5.5.30-MariaDB' socket: '/home/valentin/.local/share/akonadi/socket-zx.rusu.info/mysql.socket' port: 0 Source distribution

The problem was solved by switching to the external MySQL (more precisely, it’s MariaDB) server I happen to run on the same system. I created a new “akonadi” database, granted full rights to a dedicated “akonadi” user. I also cleared the “options” field, that for an obscure reason specifies a socket connection and now I’m back to a stable configuration after starting the akonadi server.

Oh, I also needed to do the following adjustments:

  • Remove then recreate the local folders, as my previous configuration stored mails in a KMail folder
    • In fact, KMail forced me to do that, as it crashed after the switch to the new database with these errors
kontact(17733)/libakonadi Akonadi::SpecialCollectionsRequestJob::slotResult: Failed SpecialCollectionsRequestJob::slotResult "Failed to fetch the resource collection." 
kontact(17733) MailCommon::Kernel::emergencyExit: "The Email program encountered a fatal error and will terminate now.
The error was:
Failed to fetch the resource collection."
  • Remove then recreate the “mail dispatcher agent” in akonadi console
  • Reconfigure the folders
    • Now, all my old messages are shown as unread, but that’s not really a problem
  • Reconfigure mail filters
    • That’s because removing the local folders left the rules without target folders
  • Reconfigure folder expiration rules

A final word about the performance of KMail. It seems to me that it’s now a lot more responsive. The application is now really fast displaying my mails, be it on my IMAP server or into the local folders. Congrats to the PIM team!