无法使用 apt-get 在 Debian 6 服务器上升级 mySql

无法使用 apt-get 在 Debian 6 服务器上升级 mySql

我运行 Debian 6 服务器,并用它来托管十几个基于 LAMP 的网站。我将其配置为每当有软件更新可用时都向我发送电子邮件,今天早上我收到了 6 个新的可用更新通知,这些更新均与 mySql 有关:

mysql 服务器、mysql 客户端、mysql 通用

以及其他一些依赖项。我尝试运行

apt-get 更新 apt-get 升级

一切正常,直到升级过程遇到 mysql-client。我收到以下错误:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages will be upgraded:
   mysql-client-5.5
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,772 kB of archives.
After this operation, 7,049 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y

Reading changelogs... Done

(Reading database ... 84121 files and directories currently installed.)
Preparing to replace mysql-client-5.5 5.5.38-1~dotdeb.0 (using .../mysql-client-5.5_5.5.46-0+deb6u1_amd64.deb) ...

Unpacking replacement mysql-client-5.5 ...
dpkg: error processing /var/cache/apt/archives/mysql-client-5.5_5.5.46-0+deb6u1_amd64.deb (--unpack):

 trying to overwrite '/usr/share/man/man1/mysql.1.gz', which is also in package mysql-client-core-5.5 5.5.38-1~dotdeb.0
configured to not write apport reports
                                  dpkg-deb: subprocess paste killed by signal (Broken pipe)

Processing triggers for man-db ...

Errors were encountered while processing:

 /var/cache/apt/archives/mysql-client-5.5_5.5.46-0+deb6u1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

我的经验不足,无法完全理解发生了什么。我尝试按照消息提示运行 apt-get -f install,但什么也没发生。我还尝试删除 mysql-client(想法是“我删除这个,然后从头开始重新安装它”),但此操作也因相同的错误而失败。我尝试清除 mysql,但系统也无法完成该操作。

目前,我重新启动了该服务,现在一切看起来都正常,但升级失败的问题仍然存在。

下面是我服务器上安装的所有 mysql 相关软件包的 grep:

~# dpkg -l | grep -i mysql
ii  libdbd-mysql-perl                     4.016-1                      Perl5 database interface to the MySQL database
ii  libmysqlclient16                      5.1.73-1+deb6u1              MySQL     database client library
ii  mysql-client                          5.5.46-0+deb6u1              MySQL database client (metapackage depending on the latest version)
ii  mysql-client-5.5                      5.5.38-1~dotdeb.0            MySQL database client binaries
ii  mysql-client-core-5.5                 5.5.38-1~dotdeb.0            MySQL database core client binaries
ii  mysql-common                          5.5.38-1~dotdeb.0            MySQL database common files, e.g. /etc/mysql/my.cnf
ii  mysql-common-5.5                      5.5.46-0+deb6u1              MySQL database common files, e.g. /etc/mysql/my.cnf
ii  mysql-server                          5.5.46-0+deb6u1              MySQL database server (metapackage depending on the latest version)
rc  mysql-server-5.1                      5.1.73-1+deb6u1              MySQL database server binaries and system database setup
iU  mysql-server-5.5                      5.5.46-0+deb6u1              MySQL database server binaries and system database setup
ii  mysql-server-core-5.5                 5.5.46-0+deb6u1              MySQL database server binaries
ii  php5-mysql                            5.4.45-1~dotdeb+6.1          MySQL module for php5
rc  php5-mysqlnd                          5.4.45-1~dotdeb+6.1          MySQL module for php5 (Native Driver)
ii  phpmyadmin                            4:3.3.7-10                   MySQL web administration tool

添加 apt-get remove 的结果

~# apt-get remove mysql-server-5.5
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 mysql-server : Depends: mysql-server-5.1 but it is not going to be installed or
                         mysql-server-5.5 but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

有人能帮我了解如何解决这个问题吗?提前谢谢您,Simone

答案1

正如@M Somerville 所解释的那样,您使用的 dotdeb 存储库先前安装的软件包与现在包含较新版本的 mysql 5.5 的官方 debian 存储库之间存在冲突。

您需要做的是完全删除 mysql 5.5,然后安装存储库中可用的最新版本。

这为我解决了这个问题,并且没有丢失任何数据/配置:

apt-get remove mysql-client-5.5 mysql-client-core-5.5 mysql-client mysql-server-5.5 mysql-server

然后

apt-get install mysql-client mysql-server

无论如何,我都不能过分强调在您尝试此操作之前进行备份的重要性。

祝你好运

答案2

Debian 于 12 月 9 日将 MySQL 5.5.46 反向移植到 squeeze-lts。从您所说的内容来看,您似乎一直在使用 dotdeb 存储库以及 Debian 的存储库,而 dotdeb 包含 MySQL 5.5.38。因此,现在 squeeze-lts 包含您已安装的软件包的较新软件包,它会尝试安装它。但这两个存储库似乎在软件包名称/冲突/依赖性方面不一致,因此 mysql-client-5.5(存在于两个存储库中)的升级会因 dotdeb 软件包 mysql-client-core-5.5 而发生冲突,而 squeeze-lts 对此一无所知(因此 wurtel 的评论无济于事,因为没有什么可升级的)。

一般情况下,我绝不会强制安装,即使有人建议你这样做 :) 如果你对 squeeze-lts 的 5.5.46 感到满意,那么我建议你尝试卸载任何 5.5.38 版本的软件包,例如 mysql-client-core-5.5,而不是 mysql-client,然后是 mysql-client-5.5,然后是 mysql-common – 希望这样做不会发生冲突,虽然我不能确定,抱歉。如果它确实有效,那么你删除并重新添加的想法听起来不错,可以确保一切都干净地安装。

如果 dotdeb 将其存储库更新到比 squeeze-lts 更高的版本,这一切可能都会再次发生,一般来说,我建议如果你从第三方存储库(如 dotdeb)获取某些东西,你就从那里固定软件包,这样它们就不会被核心存储库中的更改所覆盖。

相关内容