Dotdeb 存储库与 MariaDB 5.5 的问题(解决方案)
Dotdeb 是一个目前主要面向 Debian 和 Ubuntu 的存储库,为 LAMP 服务器提供了一系列不错的软件包。
最近,MySQL 5.6 被添加到了 dotdeb 存储库中。表面上看,这是一个非常无害的添加。MariaDB 是 MySQL 的替代品,为 MySQL 设计的应用程序应该可以轻松切换到 MariaDB。因此,MariaDB 也包含了使用 MySQL 的应用程序所依赖的库,例如 libmysqlclient18 和 mysql-common。dpkg 包管理器会查看 dotdeb 中的 MySQL 5.6 软件包,并认为 5.6 版本高于 5.5 版本,这导致在正常的 apt-get 安装和升级过程中删除或替换库。
问题出现在以下情况中:
- apt-get install mariadb-server-5.5(全新安装或在旧版本基础上安装)
- apt-get upgrade(如果已安装 MariaDB 5.5)
- apt-get dist-upgrade(如果已安装 MariaDB 5.5)
情况 3,dist-upgrade,特别麻烦,因为它在尝试升级 libmysqlclient18 和 mysql-common 软件包时,dpkg 会移除 MariaDB。
MySQL 5.5 用户也受到类似的影响,尽管后果看起来稍微轻一些。我们早期的测试显示,例如 *dist-upgrade* 会将 MySQL 5.5 升级到 MySQL 5.6,这可能会让人感到意外。因此,MySQL 5.5 用户应该仔细检查他们是如何受到影响的。
请参阅下文,了解这些问题在实践中是什么样子的示例。还需要注意的是,如果您使用的是 MariaDB 10.0,则不存在这些问题。使用 MariaDB 10.0 时,所有列出的情况都可以正常工作。MariaDB 10.0 现在是 GA 版本,因此是一个很好的替代方案。
解决方案
幸运的是,有一个已被证明有效的解决方法可以使用。通过固定 MariaDB 存储库,您可以覆盖正常行为(即最高版本号优先)。这个过程很简单。您只需要在 /etc/apt/preferences.d/ 目录下为 MariaDB 存储库添加一个 preferences 文件(扩展名为 .pref)。文件内容应类似于以下内容:
$ cat /etc/apt/preferences.d/mariadb.pref Package: * Pin: origin ftp.osuosl.org Pin-Priority: 1000
*Pin-Priority* 的值必须至少为 1000。另请注意,*Pin:* 行需要包含您用于 MariaDB apt sources 文件条目的存储库域名。在此示例中,域名是 *ftp.osuosl.org*。
有了这个 preference 文件,MariaDB 存储库中的软件包将优先于 dotdeb 存储库中同名的软件包,并且上面列出的问题情况将正常工作。
非常感谢及时在 IRC 上报告问题、帮助找到根本原因并尝试使用解决方法的各位用户!
问题情况示例
情况 1: 全新安装或在 MariaDB 5.5 的旧版本基础上安装
结果: 失败
$ sudo apt-get install mariadb-server mariadb-client Reading package lists... Done Building dependency tree Reading state information... Done 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-client : Depends: mariadb-client-5.5 (= 5.5.36+maria-1~wheezy) but it is not going to be installed mariadb-server : Depends: mariadb-server-5.5 (= 5.5.36+maria-1~wheezy) but it is not going to be installed E: Unable to correct problems, you have held broken packages.
情况 2: apt-get upgrade
结果: MariaDB 服务器和客户端未升级
$ sudo apt-get upgrade Reading package lists... Done Building dependency tree Reading state information... Done The following packages have been kept back: libmariadbclient18 libmysqlclient18 mariadb-client mariadb-client-5.5 mariadb-client-core-5.5 mariadb-server mariadb-server-5.5 mariadb-server-core-5.5 mysql-common The following packages will be upgraded: mariadb-common 1 upgraded, 0 newly installed, 0 to remove and 9 not upgraded. Need to get 3,276 B of archives. After this operation, 0 B of additional disk space will be used.
情况 3: apt-get dist-upgrade
结果: mariadb-server 和 mariadb-client 被移除
$ sudo apt-get dist-upgrade Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done The following packages will be REMOVED: libmariadbclient18 mariadb-client mariadb-client-5.5 mariadb-client-core-5.5 mariadb-server mariadb-server-5.5 mariadb-server-core-5.5 The following packages will be upgraded: libmysqlclient18 mysql-common 2 upgraded, 0 newly installed, 7 to remove and 0 not upgraded. Need to get 1,210 kB of archives. After this operation, 109 MB disk space will be freed.
谢谢这个解决方案。
FYI(供参考),尽管 Unbunteros 也在使用它,但 Dotdeb 仅针对 Debian,包括其 stable 和 oldstable 版本,即当前的“Wheezy”和“Squeeze”。谢谢。
在这个解决方案中,您不必修改存储库域名
Package: *
Pin: release o=MariaDB
Pin-Priority: 1001
5.5.37 版本何时发布?
5.5.37 已于 4 月 17 日发布。
5.5.37 已于 4 月 17 日发布。