Debian Bookworm KDE环境下安装mariadb-server因Akonadi内置MariaDB冲突失败的解决咨询
最近我拿到一台预装Debian Bookworm(2023稳定版)+ KDE桌面的Tuxedo新笔记本,想装个系统级的MariaDB服务器,结果执行sudo apt install mariadb-server的时候直接报错卡住了,折腾了好一会儿才找到问题根源,这里把过程和解决方法分享给大家。
遇到的报错信息
安装过程中弹出的错误提示是这样的:
Preparing to unpack .../04-mariadb-server_1%3a10.11.4-1~deb12u1_amd64.deb...
Failed to stop mariadb.service: Unit mariadb.service not loaded.
invoke-rc.d: initscript mariadb, action "stop" failed.
Failed to stop mysql.service: Unit mysql.service not loaded.
invoke-rc.d: initscript mysql, action "stop" failed.
Attempt to stop MariaDB/MySQL server returned exitcode 5
There is a MariaDB/MySQL server running, but we failed in our attempts to stop it.
Stop it yourself and try again!
问题根源排查
一开始我完全懵了——明明是新机器,根本没装过MariaDB或者MySQL,怎么会有服务在运行?后来查了进程列表才发现,KDE桌面默认自带的Akonadi组件(负责日历、联系人这类PIM应用的后台服务),默认依赖akonadi-backend-mysql包,会以当前普通用户的身份启动一个专属的MariaDB实例,进程信息如下:
/usr/sbin/mysqld --defaults-file=/home/username/.local/share/akonadi/mysql.conf --datadir=/home/username/.local/share/akonadi/db_data/ --socket=/run/user/1000/akonadi/mysql.socket --pid-file=/run/user/1000/akonadi/mysql.pid
这个用户级的MariaDB实例和我们要装的系统级mariadb-server完全独立,但apt的安装脚本会全局检测是否有MySQL/MariaDB进程在运行,不管是谁启动的都会尝试停止。但脚本用的是sudo权限,却没法停止普通用户启动的进程,所以就触发了报错。
解决步骤
其实很简单,只要临时停掉Akonadi的服务,安装完成后再恢复就行:
- 临时停止Akonadi服务
不用加sudo,直接用当前用户身份执行:
执行完可以用akonadictl stopps aux | grep mysqld确认那个用户级的mysqld进程已经消失。 - 正常安装mariadb-server
现在再执行安装命令就不会报错了:sudo apt install mariadb-server - 恢复Akonadi服务
安装完成后,重启Akonadi服务即可,它会自动重新启动自己的MariaDB实例,和系统级服务互不干扰:
或者直接重启桌面会话,Akonadi也会自动后台启动。akonadictl start
补充说明
这里要强调一下:Akonadi的MariaDB实例是用户专属的,有独立的配置文件、数据目录和socket,和系统级的mariadb-server完全隔离,两者可以同时运行不会冲突。以后如果再遇到类似的安装报错,先检查下是不是有用户级的MySQL/MariaDB进程在跑就好。
备注:内容来源于stack exchange,提问作者V. Bozz

