我将 Ubuntu 19.04 升级到 19.10,重启后 Akonadi (5.11.3) 无法启动。当我尝试在命令行中启动 akonadi 服务器时,我得到以下信息:
~$akonadictl 启动
连接到已弃用的信号 QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString)
org.kde.pim.akonadiserver:启动 Akonadi 服务器...
org.kde.pim.akonadiserver:数据库服务器意外停止
org.kde.pim.akonadiserver:初始连接期间数据库进程意外退出!org.kde.pim.akonadiserver:可执行文件:“/usr/sbin/mysqld-akonadi”org.kde.pim.akonadiserver:参数:(“--defaults-file=/home/me/.local/share/akonadi/mysql.conf”、“--datadir=/home/me/.local/share/akonadi/db_data/”、“--socket=/run/user/1001/akonadi/default/mysql.socket”、“--pid-file=/run/user/1001/akonadi/default/mysql.pid”)
org.kde.pim.akonadiserver:stdout:“”org.kde.pim.akonadiserver:stderr:“”org.kde.pim.akonadiserver:退出代码:1
org.kde.pim.akonadiserver:进程错误:“未知错误” mysqladmin:连接到‘localhost’上的服务器失败错误:‘无法通过套接字‘/run/user/1001/akonadi/default/mysql.socket’连接到本地 MySQL 服务器 (2)’请检查 mysqld 是否正在运行以及套接字:“/run/user/1001/akonadi/default/mysql.socket”是否存在!
org.kde.pim.akonadiserver:无法删除运行时连接配置文件 org.kde.pim.akonadiserver:正在关闭 AkonadiServer...
我使用以下输入检查 mysql.err 文件。
~$cat ~/.local/share/akonadi/db_data/mysql.err
2019-10-19T11:27:02.910707Z 0 [警告] [MY-010097] [服务器] --secure-file-priv 的配置不安全:当前值不限制生成文件的位置。请考虑将其设置为有效的非空路径。
2019-10-19T11:27:02.910736Z 0 [系统] [MY-010116] [服务器] /usr/sbin/mysqld (mysqld 8.0.17-0ubuntu2) 作为进程 8385 启动
2019-10-19T11:27:02.912513Z 0 [警告] [MY-013242] [服务器] --character-set-server:“utf8”当前是字符集 UTF8MB3 的别名,但在未来的版本中将成为 UTF8MB4 的别名。请考虑使用 UTF8MB4 以避免歧义。
2019-10-19T11:27:02.912523Z 0 [警告] [MY-013244] [服务器] --collation-server: 'utf8_general_ci' 是已弃用的字符集 UTF8MB3 的排序规则。请考虑改用具有适当排序规则的 UTF8MB4。2019-10-19T11:27:02.917836Z 1 [系统] [MY-011012] [服务器] 开始升级数据目录。
2019-10-19T11:27:03.171213Z 1 [错误] [MY-010781] [服务器] 在 mysql 架构中发现 ./mysql/index_stats.frm 文件。DD 将创建同名的 .ibd 文件。请重命名表并再次启动升级过程。
2019-10-19T11:27:03.171223Z 1 [错误] [MY-010336] [服务器] 发现与其中一个字典表同名的.frm 文件。
2019-10-19T11:27:03.171330Z 0 [错误] [MY-010020] [服务器] 数据字典初始化失败。
2019-10-19T11:27:03.171338Z 0 [错误] [MY-013236] [服务器] 指定的数据目录 /home/me/.local/share/akonadi/db_data/ 不可用。您可以删除服务器添加到其中的所有文件。
2019-10-19T11:27:03.697829Z 0 [错误] [MY-010065] [服务器] 无法关闭组件基础设施。
2019-10-19T11:27:03.171475Z 0 [错误] [MY-010119] [服务器] 正在中止
2019-10-19T11:27:03.697752Z 0 [系统] [MY-010910] [服务器] /usr/sbin/mysqld:关闭完成(mysqld 8.0.17-0ubuntu2)(Ubuntu)。
为什么从 Ubuntu 19.04 升级到 19.10 后 Akonadi 无法启动?这与升级到 mysql 8.0 有关吗?如何解决?
答案1
遇到同样的问题,升级后 akonadi 因 MySQL 而无法运行。对于我来说,安装 MariaDB 不是一个选择,因为我的工作。我之前使用 MariaDB,但我不得不切换到 MySQL。
1 │ 2019-11-17T22:14:02.183446Z 0 [Warning] [MY-010097] [Server] Insecure configuration for --secure-file-priv: C
│ urrent value does not restrict location of generated files. Consider setting it to a valid, non-empty path.
2 │ 2019-11-17T22:14:02.183483Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.17-0ubuntu2) startin
│ g as process 30942
3 │ 2019-11-17T22:14:02.186416Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an a
│ lias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider usi
│ ng UTF8MB4 in order to be unambiguous.
4 │ 2019-11-17T22:14:02.186429Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8_general_ci' is a colla
│ tion of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation ins
│ tead.
5 │ 2019-11-17T22:14:02.194794Z 1 [ERROR] [MY-011011] [Server] Failed to find valid data directory.
6 │ 2019-11-17T22:14:02.194929Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
7 │ 2019-11-17T22:14:02.195077Z 0 [ERROR] [MY-010119] [Server] Aborting
8 │ 2019-11-17T22:14:02.195315Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.1
│ 7-0ubuntu2) (Ubuntu).
这些是我收到的错误和警告。
首先将消除嘈杂的警告
vim /home/mathieu/.local/share/akonadi/mysql.conf
替换character_set_server=utf8
为 utf8mb4 按照此文档注释掉collation_server=
,默认就好https://dev.mysql.com/doc/refman/8.0/en/charset-server.html
我认为我们无能为力,secure_file_priv=
我相信 akonadi 需要将其清空才能从任意位置加载文件。doc:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
那么实际错误Failed to find valid data directory
由于 akonadi 主要是临时数据,我认为最简单的方法是删除 db_data 目录并重新开始。我们将重命名该文件夹,而不是删除它
$ cd ~/.local/share/akonadi
$ mv db_data db_databkp
$ mkdir db_data
$ /usr/sbin/mysqld-akonadi --defaults-file=/home/mathieu/.local/share/akonadi/mysql.conf --datadir=/home/mathieu/.local/share/akonadi/db_data/ --socket=/run/user/1000/akonadi/default/mysql.socket --pid-file=/run/user/1000/akonadi/default/mysql.pid --initialize --console
该--initialize
选项启动db_data
新的目录。如果比较两个目录,你会看到一堆与前一个不同的文件。
现在出现这个错误
[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
我正在将 mysql.conf 中的此选项lower_case_table_names=
从 1 切换到 0
您还需要注释掉这个弃用的选项
log_warnings=2
我不再直接使用一长串参数调用 mysqld-akonadi,而是直接运行akonadiserver
并cat
查看 mysql.error 日志文件
现在收到此错误[Server] unknown variable 'query_cache_size=0'
将会评论此内容
还需要注释掉query_cache_type=0
akonadi 能够与 MySQL 8 一起运行
总之:
- utf8 到 utf8mb4 是一个很好的改变,将两者都注释掉是新的默认设置
- 注释掉 4 个弃用的选项
- 移走旧的 db_data 目录,创建一个空目录
- 重启 akonadiserver
希望这可以帮助
更新:如果您收到此错误
org.kde.pim.akonadiserver: Running DB initializer
org.kde.pim.akonadiserver: "\nSql error: Duplicate column name 'version' QMYSQL: Unable to execute query\nQuery: ALTER TABLE SchemaVersionTable ADD COLUMN version INTEGER NOT NULL DEFAULT 0"
这意味着该列已添加,但数据库迁移未标记为已完成。我建议db_data
再次关闭该文件夹,手动运行初始化。然后启动 akonadiserver
它终于可以为我运行了。并且在 19.04 中不断崩溃的 korganizer 现在可以运行了 ;)
更新(2020):重置 Akonadi DB 时请务必小心此错误 https://bugs.kde.org/show_bug.cgi?id=414400
自 19.10 以来,我遇到了太多问题。MariaDB 和 MySQL 8 都无法正常工作。不得不不断重置 Akonadi。最后通过 Docker 运行了 MySQL 5.6 和 5.7
sudo docker run --name mysql57 --rm -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=docker -d mysql:5.7
但一直有问题。我放弃了 Akonadi/kdepim,卸载了所有相关软件包并改用 Thunderbird。Plasma 运行顺畅。
答案2
现在应该使用 mariadb。mysql 8 不兼容。
sudo apt install mariadb-server-core-10.3 mariadb-client-core-10.3
答案3
自从从 Kubuntu 19.04 更新到 19.10 以来,我也遇到了 Akonadi 问题。mysql 日志文件~/.local/share/akonadi/db_data/mysql.err
包含以下错误:
unknown variable 'log-warnings=2'
因此,我将这些注释掉/home/NNN/.local/share/akonadi/mysql.conf
:
# print warnings and connection errors (default:1)
#log_warnings=2
.
.
# Memory allocated for caching query results (default:0 (disabled))
#query_cache_size=0
. .
# Do not cache results (default:1)
#query_cache_type=0
说实话,我并不关心,改变了什么变量,会带来什么后果……