为什么从 Ubuntu 19.04 升级到 19.10 后 Akonadi 无法启动?

为什么从 Ubuntu 19.04 升级到 19.10 后 Akonadi 无法启动?

我将 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] [服务器] --collat​​ion-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,而是直接运行akonadiservercat查看 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

说实话,我并不关心,改变了什么变量,会带来什么后果……

答案4

错误信息说 MySQL 中有一个用户表,index_stats其名称似乎很奇怪。除非您或您使用的某个程序创建了该表。

换句话说,您不能再拥有具有该名称的表,因为 MySQL 8.0 使用具有该名称的表。

您可以尝试将文件重命名为类似的名称index_stats_bak.frm,但很难说出使用该文件的程序会发生什么。

这个帖子index_stats其中包含系统现在使用的表名列表。

看看来源对于创建表的 Akonadi 来说,似乎不太可能与 MySQL 8 发生冲突。我的猜测是,MySQL 进行了部分升级,只保留了部分新表,但不是全部。index_stats 可能是在那次部分更新中创建的。

相关内容