After Leap upgrade 15.5 to 15.6. Akonadi fails to start

Hello,
after a seemingly successful upgrade from Leap 15.5. to 15.6 I have noticed that all Akonadi-based apps reproducibly do not start anymore. The ~/.local/share/akonadi/Akonadi.error file always gives

2025-03-01T18:30:21 [INFO ] org.kde.pim.akonadiserver: Starting up the Akonadi Server...
2025-03-01T18:30:21 [DEBUG] org.kde.pim.akonadiserv2025-03-01T18:30:27 [INFO ] org.kde.pim.akonadicontrol: Application '/usr/bin/akonadiserver' exited normally...
Found mysqlcheck:  "/usr/bin/mysqlcheck"
2025-03-01T18:30:21 [DEBUG] org.kde.pim.akonadiserver: Found mysql_upgrade:  "/usr/bin/mysql_upgrade"
2025-03-01T18:30:21 [DEBUG] org.kde.pim.akonadiserver: Using mysqld: "/usr/sbin/mysqld"
2025-03-01T18:30:22 [DEBUG] org.kde.pim.akonadiserver:  globalConfig :  "/etc/xdg//akonadi/mysql-global.conf"  localConfig :  ""  actualConfig :  "/home/MyUsername/.local/share/akonadi/mysql.conf"
2025-03-01T18:30:22 [DEBUG] org.kde.pim.akonadiserver: mysqld reports version 10.11.9 (MariaDB)
2025-03-01T18:30:22 [DEBUG] org.kde.pim.akonadiserver: Executing: "/usr/sbin/mysqld" "--defaults-file=/home/MyUsername/.local/share/akonadi/mysql.conf --datadir=/home/MyUsername/.local/share/akonadi/db_data/ --socket=/run/user/1000/akonadi/mysql.socket --pid-file=/run/user/1000/akonadi/mysql.pid"
2025-03-01T18:30:27 [CRITICAL] org.kde.pim.akonadiserver: database server stopped unexpectedly
2025-03-01T18:30:27 [CRITICAL] org.kde.pim.akonadiserver: Database process exited unexpectedly during initial connection!
2025-03-01T18:30:27 [CRITICAL] org.kde.pim.akonadiserver: executable: "/usr/sbin/mysqld"
2025-03-01T18:30:27 [CRITICAL] org.kde.pim.akonadiserver: arguments: ("--defaults-file=/home/andreas/.local/share/akonadi/mysql.conf", "--datadir=/home/MyUsername/.local/share/akonadi/db_data/", "--socket=/run/user/1000/akonadi/mysql.socket", "--pid-file=/run/user/1000/akonadi/mysql.pid")
2025-03-01T18:30:27 [CRITICAL] org.kde.pim.akonadiserver: stdout: ""
2025-03-01T18:30:27 [CRITICAL] org.kde.pim.akonadiserver: stderr: ""
2025-03-01T18:30:27 [CRITICAL] org.kde.pim.akonadiserver: exit code: 1
2025-03-01T18:30:27 [CRITICAL] org.kde.pim.akonadiserver: process error: "Unknown error"
2025-03-01T18:30:27 [DEBUG] org.kde.pim.akonadiserver: terminating connection threads
2025-03-01T18:30:27 [DEBUG] org.kde.pim.akonadiserver: terminating service threads
2025-03-01T18:30:27 [DEBUG] org.kde.pim.akonadiserver: stopping db process
2025-03-01T18:30:27 [CRITICAL] org.kde.pim.akonadiserver: Failed to remove runtime connection config file
2025-03-01T18:30:27 [INFO ] org.kde.pim.akonadiserver: Shutting down AkonadiServer...

To try to solve this I have unsuccessfully attempted to:

  1. Force update and later reinstallation of all Akonadi- and MariaDB-related packages via YAST. ==> No solution!
  2. Rename and later delete the ~/.local/share/akonadi directory ==> akonadictl start creates the directory and its contents, so I could work as a “fresh user”, but (of course) my previous data are not there.
  3. In the fresh ~/.local/share/akonadidirectory I have tried to “inject” my former directories db_data, file_db_data, and search_db (from Leap 15.5. backup) followed by a /usr/bin/mysql_upgrade --force --defaults-file=/home/MyUsername/.local/share/akonadi/mysql.conf --socket=/run/user/1000/akonadi/mysql.socket with the then-running Akonadi and DB servers, hoping that it would do the DB update/migration. This seemingly worked well since the upgrade call finished without errors and the running Akonadi could then be used as long as it was running, but my old data still did not show up. But after testing with an akonadictl restart, which crashes, the ~/.local/share/akonadi/db_data/mysql.err file gives
2025-03-01 16:35:49 0 [Note] Starting MariaDB 10.11.9-MariaDB source revision 0e8fb977b00983d98c4c35e39bc1f36463095938 server_uid eD9YK0+dG25CDs5JbhVBvTjeNeo= as process 3737
2025-03-01 16:35:49 0 [Warning] option 'innodb-log-buffer-size': unsigned value 1048576 adjusted to 2097152
2025-03-01 16:35:49 0 [Note] InnoDB: Compressed tables use zlib 1.2.13
2025-03-01 16:35:49 0 [Note] InnoDB: Number of transaction pools: 1
2025-03-01 16:35:49 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
2025-03-01 16:35:49 0 [Note] InnoDB: Using Linux native AIO
2025-03-01 16:35:49 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
2025-03-01 16:35:49 0 [Note] InnoDB: Completed initialization of buffer pool
2025-03-01 16:35:49 0 [Note] InnoDB: Buffered log writes (block size=4096 bytes)
2025-03-01 16:35:50 0 [ERROR] InnoDB: Upgrade after a crash is not supported. The redo log was created with MariaDB 10.6.8. You must start up and shut down MariaDB 10.7 or earlier.
2025-03-01 16:35:50 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2025-03-01 16:35:50 0 [Note] InnoDB: Starting shutdown...
2025-03-01 16:35:50 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2025-03-01 16:35:50 0 [Note] Plugin 'FEEDBACK' is disabled.
2025-03-01 16:35:50 0 [ERROR] Unknown/unsupported storage engine: innodb
2025-03-01 16:35:50 0 [ERROR] Aborting
  1. Playing around with restarting the DB in various configurations with not all old *db* directories “injected” also did not help.

My guess is that somehow during the Leap upgrade some “one-time” migration of the Akonadi data/DB failed, since I could trace the crash down to only the old db_data directory causing the problems (with the other old *db* directories present under a fresh user structure Akonadi would at least start).

Does anyone have an idea how I can import or migrate my old Akonadi DB to get access to my old data again? Of course I would prefer a clean migration of the old data/database, but starting with a fresh user structure, into which the old data can be imported, would also be ok. However, I did not find a way to force Akonadi to do such an import, even in akonadiconsole, and the mysql_upgrade --force (attempt 3.) was also useless.

Any help would be greatly appreciated! Thank you very much in advance!

Did you run the upgrade from the console while nobody was logged in in the GUI? (or better even in run-level multi-user)

The upgrade was first done from the DVD image offline without internet access, then the updates were done via YAST.

That should be OK I guess.

Still the problem occurred and persists - that’s why I asked.

I understand, but checking if a supported way of upgrading was used is one step in gathering information for all that may try to help you.

Personally I am not the one fluent in KDE and Akonadi internals. There is however one thing that you could try (again to provide more info): try with another, fresh user to do the same programs.

Well, as I wrote, I have already tried the “fresh user” approach, and this gave me a working Akonadi but without my old data and without the possibility to import these.

Can you run as User:
/usr/bin/akonadiselftest

And post it here or on susepaste?

Sorry, missed that. And of course usera can not use userb’s data.

Apart from rolling back to Leap 15.5 and then, archiving all your Local e-Mail and Kalendar entries, not really.


Another view is to take a look at the KDE Plasma definition of Akonadi – <https://userbase.kde.org/Akonadi>

  • The Akonadi database is an index and cache of the PIM information.

The actual PIM information is stored either on a remote server [IMAP/POP; CalDAV calendar] or, in local files.

Yes, I have had the suspicion that, sometimes PIM content is only resident in the Akonadi database cache and, that it hasn’t been written to a file in a local folder …

And yes, to work around this issue for the case that Akonadi breaks for whatever reason, I regularly archive my e-Mail and Kalendar content.

  • In other words, I take regular backups of all my PIM content – also the content on my ISP’s IMAP folders …
    That may well be a little bit paranoic but, due you really trust the people who receive your monthly telephone bill payments? :smiling_imp:

With the “old” *db* directories in place akonadiselftest gives this report:

Akonadi Server Self-Test Report===============================
Test 1:  SUCCESS
--------

Database driver found.
Details: The QtSQL driver 'QMYSQL' is required by your current Akonadi server configuration and was found on your system.

File content of '/home/MyUsername/.config/akonadi/akonadiserverrc':
[Debug]
Tracer=null

[%General]
Driver=QMYSQL

[QMYSQL]
Host=
Name=akonadi
Options="UNIX_SOCKET=/run/user/1000/akonadi/mysql.socket"
ServerPath=/usr/sbin/mysqld
StartServer=true


Test 2:  SUCCESS
--------

Akonadi is not running as root
Details: Akonadi is not running as a root/administrator user, which is the recommended setup for a secure system.

Test 3:  SUCCESS
--------

MySQL server found.
Details: You have currently configured Akonadi to use the MySQL server '/usr/sbin/mysqld'.
Make sure you have the MySQL server installed, set the correct path and ensure you have the necessary read and execution rights on the server executable. The server executable is typically called 'mysqld'; its location varies depending on the distribution.

Test 4:  SUCCESS
--------

MySQL server is executable.
Details: MySQL server found: /usr/sbin/mysqld  Ver 10.11.9-MariaDB for Linux on x86_64 (MariaDB package)


Test 5:  ERROR
--------

MySQL server log contains errors.
Details: The MySQL server error log file '<a href="/home/andreas/.local/share/akonadi/db_data/mysql.err">/home/andreas/.local/share/akonadi/db_data/mysql.err</a>' contains errors.

File content of '/home/MyUsername/.local/share/akonadi/db_data/mysql.err':
2025-03-03 21:17:49 0 [Note] Starting MariaDB 10.11.9-MariaDB source revision 0e8fb977b00983d98c4c35e39bc1f36463095938 server_uid eD9YK0+dG25CDs5JbhVBvTjeNeo= as process 9862
2025-03-03 21:17:49 0 [Warning] option 'innodb-log-buffer-size': unsigned value 1048576 adjusted to 2097152
2025-03-03 21:17:49 0 [Note] InnoDB: Compressed tables use zlib 1.2.13
2025-03-03 21:17:49 0 [Note] InnoDB: Number of transaction pools: 1
2025-03-03 21:17:49 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
2025-03-03 21:17:49 0 [Note] InnoDB: Using Linux native AIO
2025-03-03 21:17:49 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
2025-03-03 21:17:49 0 [Note] InnoDB: Completed initialization of buffer pool
2025-03-03 21:17:49 0 [Note] InnoDB: Buffered log writes (block size=4096 bytes)
2025-03-03 21:17:49 0 [ERROR] InnoDB: Upgrade after a crash is not supported. The redo log was created with MariaDB 10.6.8. You must start up and shut down MariaDB 10.7 or earlier.
2025-03-03 21:17:49 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2025-03-03 21:17:49 0 [Note] InnoDB: Starting shutdown...
2025-03-03 21:17:49 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2025-03-03 21:17:49 0 [Note] Plugin 'FEEDBACK' is disabled.
2025-03-03 21:17:49 0 [ERROR] Unknown/unsupported storage engine: innodb
2025-03-03 21:17:49 0 [ERROR] Aborting


Test 6:  SUCCESS
--------

MySQL server default configuration found.
Details: The default configuration for the MySQL server was found and is readable at <a href="/etc/xdg//akonadi/mysql-global.conf">/etc/xdg//akonadi/mysql-global.conf</a>.

File content of '/etc/xdg//akonadi/mysql-global.conf':
#
# Global Akonadi MySQL server settings,
# These settings can be adjusted using $HOME/.config/akonadi/mysql-local.conf
#
# Based on advice by Kris Köhntopp <kris@mysql.com>
#
[mysqld]

# strict query parsing/interpretation
# TODO: make Akonadi work with those settings enabled
# sql_mode=strict_trans_tables,strict_all_tables,strict_error_for_division_by_zero,no_auto_create_user,no_auto_value_on_zero,no_engine_substitution,no_zero_date,no_zero_in_date,only_full_group_by,pipes_as_concat
# sql_mode=strict_trans_tables

# DEBUGGING:
# log all queries, useful for debugging but generates an enormous amount of data
# log=mysql.full
# log queries slower than n seconds, log file name relative to datadir (for debugging only)
# log_slow_queries=mysql.slow
# long_query_time=1
# log queries not using indices, debug only, disable for production use
# log_queries_not_using_indexes=1
#
# measure database size and adjust innodb_buffer_pool_size
# SELECT sum(data_length) as bla, sum(index_length) as blub FROM information_schema.tables WHERE table_schema not in ("mysql", "information_schema");

# NOTES:
# Keep Innob_log_waits and keep Innodb_buffer_pool_wait_free small (see show global status like "inno%", show global variables)

#expire_logs_days=3

#sync_bin_log=0

# Use UTF-8 encoding for tables
character_set_server=utf8
collation_server=utf8_general_ci

# use InnoDB for transactions and better crash recovery
default_storage_engine=innodb

# memory buffer InnoDB uses to cache data and indexes of its tables (default:128M)
# Larger values means less I/O
innodb_buffer_pool_size=128M

# Create a .ibd file for each table (default:0)
innodb_file_per_table=1

# Write out the log buffer to the log file at each commit (default:1)
innodb_flush_log_at_trx_commit=2

# Buffer size used to write to the log files on disk (default:1M for builtin, 8M for plugin)
# larger values means less I/O
innodb_log_buffer_size=1M

# Size of each log file in a log group (default:5M) larger means less I/O but more time for recovery.
innodb_log_file_size=64M

# # error log file name, relative to datadir (default:hostname.err)
log_error=mysql.err

# print warnings and connection errors (default:1)
loose_log_warnings=2

# Convert table named to lowercase
lower_case_table_names=1

# Maximum size of one packet or any generated/intermediate string. (default:1M)
max_allowed_packet=32M

# Maximum simultaneous connections allowed (default:100)
max_connections=256

# The two options below make no sense with prepared statements and/or transactions
# (make sense when having the same query multiple times)

# Memory allocated for caching query results (default:0 (disabled))
loose_query_cache_size=0

# Do not cache results (default:1)
loose_query_cache_type=0

# Do not use the privileges mechanisms
skip_grant_tables

# Do not listen for TCP/IP connections at all
skip_networking

# The number of open tables for all threads. (default:64)
table_open_cache=200

# How many threads the server should cache for reuse (default:0)
thread_cache_size=3

# wait 365d before dropping the DB connection (default:8h)
wait_timeout=31536000

# We use InnoDB, so don't let MyISAM eat up memory
key_buffer_size=16K

[client]
default-character-set=utf8


Test 7:  SKIP
--------

MySQL server custom configuration not available.
Details: The custom configuration for the MySQL server was not found but is optional.

Test 8:  SUCCESS
--------

MySQL server configuration is usable.
Details: The MySQL server configuration was found at <a href="/home/andreas/.local/share/akonadi/mysql.conf">/home/MyUsername/.local/share/akonadi/mysql.conf</a> and is readable.

File content of '/home/MyUsername/.local/share/akonadi/mysql.conf':
#
# Global Akonadi MySQL server settings,
# These settings can be adjusted using $HOME/.config/akonadi/mysql-local.conf
#
# Based on advice by Kris Köhntopp <kris@mysql.com>
#
[mysqld]

# strict query parsing/interpretation
# TODO: make Akonadi work with those settings enabled
# sql_mode=strict_trans_tables,strict_all_tables,strict_error_for_division_by_zero,no_auto_create_user,no_auto_value_on_zero,no_engine_substitution,no_zero_date,no_zero_in_date,only_full_group_by,pipes_as_concat
# sql_mode=strict_trans_tables

# DEBUGGING:
# log all queries, useful for debugging but generates an enormous amount of data
# log=mysql.full
# log queries slower than n seconds, log file name relative to datadir (for debugging only)
# log_slow_queries=mysql.slow
# long_query_time=1
# log queries not using indices, debug only, disable for production use
# log_queries_not_using_indexes=1
#
# measure database size and adjust innodb_buffer_pool_size
# SELECT sum(data_length) as bla, sum(index_length) as blub FROM information_schema.tables WHERE table_schema not in ("mysql", "information_schema");

# NOTES:
# Keep Innob_log_waits and keep Innodb_buffer_pool_wait_free small (see show global status like "inno%", show global variables)

#expire_logs_days=3

#sync_bin_log=0

# Use UTF-8 encoding for tables
character_set_server=utf8
collation_server=utf8_general_ci

# use InnoDB for transactions and better crash recovery
default_storage_engine=innodb

# memory buffer InnoDB uses to cache data and indexes of its tables (default:128M)
# Larger values means less I/O
innodb_buffer_pool_size=128M

# Create a .ibd file for each table (default:0)
innodb_file_per_table=1

# Write out the log buffer to the log file at each commit (default:1)
innodb_flush_log_at_trx_commit=2

# Buffer size used to write to the log files on disk (default:1M for builtin, 8M for plugin)
# larger values means less I/O
innodb_log_buffer_size=1M

# Size of each log file in a log group (default:5M) larger means less I/O but more time for recovery.
innodb_log_file_size=64M

# # error log file name, relative to datadir (default:hostname.err)
log_error=mysql.err

# print warnings and connection errors (default:1)
loose_log_warnings=2

# Convert table named to lowercase
lower_case_table_names=1

# Maximum size of one packet or any generated/intermediate string. (default:1M)
max_allowed_packet=32M

# Maximum simultaneous connections allowed (default:100)
max_connections=256

# The two options below make no sense with prepared statements and/or transactions
# (make sense when having the same query multiple times)

# Memory allocated for caching query results (default:0 (disabled))
loose_query_cache_size=0

# Do not cache results (default:1)
loose_query_cache_type=0

# Do not use the privileges mechanisms
skip_grant_tables

# Do not listen for TCP/IP connections at all
skip_networking

# The number of open tables for all threads. (default:64)
table_open_cache=200

# How many threads the server should cache for reuse (default:0)
thread_cache_size=3

# wait 365d before dropping the DB connection (default:8h)
wait_timeout=31536000

# We use InnoDB, so don't let MyISAM eat up memory
key_buffer_size=16K

[client]
default-character-set=utf8


Test 9:  SUCCESS
--------

akonadictl found and usable
Details: The program '/usr/bin/akonadictl' to control the Akonadi server was found and could be executed successfully.
Result:
akonadictl 5.24.5 (23.08.5)


Test 10:  ERROR
--------

Akonadi control process not registered at D-Bus.
Details: The Akonadi control process is not registered at D-Bus which typically means it was not started or encountered a fatal error during startup.

Test 11:  ERROR
--------

Akonadi server process not registered at D-Bus.
Details: The Akonadi server process is not registered at D-Bus which typically means it was not started or encountered a fatal error during startup.

Test 12:  SKIP
--------

Protocol version check not possible.
Details: Without a connection to the server it is not possible to check if the protocol version meets the requirements.

Test 13:  ERROR
--------

No resource agents found.
Details: No resource agents have been found, Akonadi is not usable without at least one. This usually means that no resource agents are installed or that there is a setup problem. The following paths have been searched: '/usr/share/akonadi/agents'. The XDG_DATA_DIRS environment variable is set to '/home/andreas/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share'; make sure this includes all paths where Akonadi agents are installed.

Directory listing of '/usr/share/akonadi/agents':
akonadiindexingagent.desktop
akonotesresource.desktop
archivemailagent.desktop
birthdaysresource.desktop
contactsresource.desktop
davgroupwareresource.desktop
etesyncresource.desktop
ewsmtaresource.desktop
ewsresource.desktop
followupreminder.desktop
googleresource.desktop
icaldirresource.desktop
icalresource.desktop
imapresource.desktop
knutresource.desktop
kolabresource.desktop
maildirresource.desktop
maildispatcheragent.desktop
mailfilteragent.desktop
mailmergeagent.desktop
mboxresource.desktop
migrationagent.desktop
mixedmaildirresource.desktop
newmailnotifieragent.desktop
notesagent.desktop
notesresource.desktop
openxchangeresource.desktop
pop3resource.desktop
sendlateragent.desktop
tomboynotesresource.desktop
unifiedmailboxagent.desktop
vcarddirresource.desktop
vcardresource.desktop

Environment variable XDG_DATA_DIRS is set to '/home/andreas/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share'

Test 14:  SUCCESS
--------

No current Akonadi server error log found.
Details: The Akonadi server did not report any errors during its current startup.

Test 15:  SUCCESS
--------

No previous Akonadi server error log found.
Details: The Akonadi server did not report any errors during its previous startup.

Test 16:  SUCCESS
--------

No current Akonadi control error log found.
Details: The Akonadi control process did not report any errors during its current startup.

Test 17:  SUCCESS
--------

No previous Akonadi control error log found.
Details: The Akonadi control process did not report any errors during its previous startup.

As further observed behavior:
After deleting the old *db* directories, letting akonadictl recreate them anew upon startup, replacing all *db* directories - except the db_data - with the old ones again and running a akonadictl fsck then all data from file_db_data gets moved into a directory file_lost+found. This is, of course, also not really satisfying.