当 Apt 报告 MariaDB 存在未满足的依赖项或损坏的软件包时安装 MariaDB

当 Apt 报告 MariaDB 存在未满足的依赖项或损坏的软件包时安装 MariaDB

我已经尝试了所有方法在这个干净的 Ubuntu 安装上安装 MariaDB,但我一直收到此错误,

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
mariadb-server : Depends: mariadb-server-5.5 (= 5.5.33a+maria-1~saucy) 
but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

我已按照本指南尝试安装它, http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

我还遵循了 MariaDB 13.10 下载页面上的“官方”指南 https://downloads.mariadb.org/mariadb/repositories/

但似乎什么都没有起作用。

编辑1

我已经尝试过了添加 PPA 后如何解决未满足的依赖关系?如何安装 MariaDB?但它仍然给我上面发布的错误。

这是一个全新安装的 Ubuntu,几乎没有安装任何东西。

编辑2

所有复选框都是更新中的票证。我运行了:

sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"

它给了我这个错误:

The following packages have unmet dependencies:
mariadb-server-5.5 : Depends: mariadb-client-5.5 (>= 5.5.33a+maria-1~saucy) 
but it is not going to be installed
Depends: mariadb-server-core-5.5 (>= 5.5.33a+maria-1~saucy) 
but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

答案1

Mariadb 和 Ubuntu Debian 存储库之间的版本不匹配

官方 Ubuntu 或 Debian 存储库中的 mysql-common 或 libmysqlclient 版本号很少高于 MariaDB 存储库中的版本号,但确实发生过。每次发生这种情况都是因为发行版存储库中 MySQL 版本中存在的关键错误修复版本,而 MariaDB 存储库中 MariaDB 版本中已修复了这些错误。

如果在尝试安装 MariaDB 时出现上述情况,您将收到如下错误:
The following packages have unmet dependencies:
mariadb-server : Depends: mariadb-server-5.5 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
解决此问题的一种方法是指定要安装的两个软件包的确切版本。为此,首先确定受影响软件包的完整版本号。一种简单的方法是使用“apt-cache show”:
apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version

这是撰写本文时的情况,因为版本号显示为:

Version: 5.5.34-0ubuntu0.13.10.1
Version: 5.5.34+maria-1~saucy

MariaDB页面给出了两种解决方案。

第一个解决方案:指定软件包版本

对于上述每个版本,您将获得一个版本列表。MariaDB 存储库中的版本将在版本字符串中包含“mariadb”,并且是您想要的版本。有了版本号,您将能够通过明确指定版本号来安装 MariaDB,如下所示:
apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>

apt-get install mariadb-server-5.5 mariadb-client-5.5 \
 libmysqlclient18=5.5.34+maria-1~saucy \
 mysql-common=5.5.34+maria-1~saucy

注意:更新至 5.5.34 以反映截至 2014.01.28 的当前版本 [RealPariah] 安装后,您需要保留这些软件包直到版本号重新同步。

安装 MariaDB 后,只要存在版本号问题,`apt-get dist-upgrade` 就会尝试删除 MariaDB,以便安装“升级的”libmysqlclient 和 mysql-common 包。为了防止这种情况发生,您可以保留它们,这样 apt 就不会尝试升级它们。为此,请打开终端,使用 `sudo -s` 成为 root,然后输入以下内容:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
这些保留将阻止您升级 MariaDB,因此当您想要删除保留时,请打开终端,使用“sudo -s”成为 root 权限,然后输入以下内容:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
然后您将能够正常升级 MariaDB(例如使用“sudo apt-get update;sudo apt-get upgrade”)。

我如何知道版本号何时再次匹配?

您可以通过注册新版本的电子邮件提醒来跟踪 MariaDB 版本号MariaDB 社区。据该网站称,这是一个low-traffic announce-only list

此外,当软件包版本再次同步时,您应该不会再在 apt 中看到一条消息,提示只有 2 个被保留的软件包会被保留,但所有 mariadb 软件包都将被保留:

The following packages have been kept back:
libmariadbclient18 libmysqlclient18 linux-generic linux-headers-generic
linux-image-generic mariadb-client-5.5 mariadb-client-core-5.5
mariadb-server mariadb-server-5.5 mariadb-server-core-5.5 mysql-common

这表明包裹编号已重新同步,也可以在 synaptic 或类似工具中进行检查。

第二种解决方案:固定 MariaDB 存储库

您可以做的另一件事是固定您使用的 MariaDB 存储库。这可以通过在“/etc/apt/preferences.d/”下创建一个包含以下内容的文件来完成:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000

替换<mirror-domain>为您使用的 MariaDB 镜像的域名。例如,ftp.osuosl.org。有了 pin 文件,来自 MariaDB 存储库的软件包将优先于来自系统存储库的软件包。

您可以在以下位置找到正在使用的镜像名称系统设置>>软件和更新,或者如果你正在使用其他版本的 Ubuntu,Synaptic >> 设置 >> 存储库, 或者cat /etc/apt/sources.list

在这种情况下,需要Pin-Priority大于或等于 1000,causes a version to be installed even if this constitutes a downgrade of the package

man 5 apt_preferences有关其他情况下的选项的更多信息,请参阅 。)

命名固定首选项文件

Note that the file in the /etc/apt/preferences.d directory are parsed in alphanumeric ascending order and need to obey the following naming convention:

The files have either no or "pref" as filename extension and only contain alphanumeric, hyphen (-), undescore (_), and period (.) characters. Otherwise APT will print a notice that it has ignored a file...

(来源:man 5 apt_preferences

因此,名称本身并不重要,但一个好的名称应该是这样的50_mariadb。这可以识别所涉及的包,并允许其他固定首选项文件按处理顺序轻松放置在此文件之前或之后。

答案2

我在 Ubuntu 14.10 中从 MySQL 升级到 Maria DB 时遇到了类似的问题。也就是说,我会陷入

 libmysqlclient18:amd64 10.0.16+maria-1~utopic (Multi-Arch: no) is not co-installable with libmysqlclient18 which has multiple installed instances

按照这些建议都无济于事后,下面的建议对我帮助很大:如何在 Ubuntu Server 中用 MariaDB 替换 MySQL作者:JournalXtra。

编辑并删除如下/var/lib/dpkg/status两个实例:libmysqlclient18

Package: libmysqlclient18
Status: deinstall ok config-files
Priority: optional
Section: libs
Installed-Size: 3392
Maintainer: Ubuntu Developers <[email protected]>
Architecture: i386
Multi-Arch: same
Source: mysql-5.5
Version: 5.5.40-0ubuntu1
Config-Version: 5.5.40-0ubuntu1
Depends: mysql-common (>= 5.5.40-0ubuntu1), libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), zlib1g (>= 1:1.1.4)
Pre-Depends: multiarch-support
Description: MySQL database client library


MySQL is a fast, stable and true multi-user, multi-threaded SQL database 
server. SQL (Structured Query Language) is the most popular database query 
language in the world. The main goals of MySQL are speed, robustness and
ease of use.


This package includes the client library.
Homepage: http://dev.mysql.com/
Original-Maintainer: Debian MySQL Maintainers <[email protected]>

让我之后能够顺利安装MariaDB。

sudo apt-get install mariadb-server

笔记:我尝试了很多次移除后才来到这里libmariadbclient18,而且libmysqlclient18这个解决方案也成功了。在移除这两个包之前,我无法解决apt-get问题,因为在我尝试任何其他修复之前,它们被报告为损坏的包。

答案3

为了解决这个问题,我删除了之前安装的 mysql

sudo apt remove mysql-server

然后安装 mariadb-server

sudo apt install mariadb-server

这适用于全新安装,如果您已经运行 mysql,请不要尝试此解决方案。

答案4

我是通过寻找与此错误相同的问题解决方案来访问此页面的。我希望我的经验能对某些人有所帮助。

就我而言,我添加了错误的 MariaDB 存储库版本(20.10“groovy”存储库到 20.04“focal”服务器),修复此问题后问题就消失了。

相关内容