当Apt报告MariaDB具有未满足的依赖关系或损坏的软件包时安装MariaDB


9

我已经尽一切努力在干净的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.

运行一次此命令以安装列出的软件包:sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"确保已选中Software Sources中Updates选项卡下的所有复选框。要验证它是否运行,请执行以下操作:打开“ 软件源”。如果您在我上面提到的命令中遇到任何错误/消息,请将其发布在您的问题中。sudo software-properties-gtk
Saurav Kumar 2013年

看来您很快就会解决问题。主要技巧是,您必须在一行中列出所有需要的软件包才能进行安装。例如,从新输出中开始,您必须执行以下操作:sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy mariadb-client-5.5"=5.5.33a+maria-1~saucy" mariadb-server-core-5.5"=5.5.33a+maria-1~saucy" 捕获我正在做的模式,因此,如果要安装更多软件包,则必须将其包含在同一行中,并遵循相同的模式。我知道这很困难,但希望对您有所帮助。回复。
Saurav Kumar 2013年

正确,我设法安装了mariadb-common并尝试安装依赖于libmysqlclient18的libmariadbclient18,但它说我已经拥有与libdbd-mysql-perl相同的libmysqlclient18。
Andreas

@Ecaz您找到解决问题的方法了吗?我也一样
乔恩·库普斯

我收到此错误:libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.33a+maria-1~saucy) but 5.5.34-0ubuntu0.13.10.1 is to be installed
Jon Koops 2013年

Answers:


16

查看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.org上注册有关新版本的电子邮件警报来跟踪MariaDB版本号。根据站点,它是一个low-traffic announce-only list

此外,当软件包版本再次同步时,您应该停止看到一条消息:仅将保留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

这表明程序包号已恢复同步,也可以在突触或类似工具中进行检查。

第二种解决方案:固定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。这可以标识所涉及的程序包,并允许将其他固定首选项文件轻松地按处理顺序放置在此文件之前或之后。


我将尝试第一个解决方案,但是您怎么知道何时解决了不匹配问题?每当他们发布更新时,我都必须搜索变更日志吗?
Andreas

我使用第一种方法,运行非常顺利。完全不用担心依赖项。我编辑了有关mariadb版本号的信息的答案
chaskes 2013年

第二种解决方案的固定文件的名称应该是什么?
Thomas Taylor

我♥您的技能。mariadb程序包搞砸了。我断言这是基于以下事实:我以前从来没有做过任何上述事情,但是上面安装了我。谢谢!
jettero

1
@ thomas-taylor在命名固定文件时添加了信息。
2013年

2

在从MySQL升级到Maria DB的Ubuntu 14.10中,我遇到了类似的问题。即我会被困住

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

遵循这些建议无济于事之后,以下内容对我有很大帮助:如何通过JournalXtra 在Ubuntu Server中用MariaDB替换MySQL

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

Package: libmysqlclient18
Status: deinstall ok config-files
Priority: optional
Section: libs
Installed-Size: 3392
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
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是一种快速,稳定和真正的多用户,多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的数据库查询语言。MySQL的主要目标是速度,健壮性和易用性。。该软件包包括客户端库。主页:http : //dev.mysql.com/ Original-Maintainer:Debian MySQL维护者

之后,我可以顺利安装MariaDB。

sudo apt-get install mariadb-server

注意:在此解决方案起作用之前,经过多次尝试删除libmariadbclient18和libmysqlclient18的尝试,我确实到达了这里。在移除这两个问题之前,我无法克服apt-get的问题,因为在我尝试进行其他任何修复之前,它们被报告为损坏的软件包。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.