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

我运行Debian 6服务器并使用它来托pipe十几个基于LAMP的网站。 我将其configuration为在软件更新可用时通过电子邮件发送给我,今天上午我收到了与mySql相关的6个新的可用更新通知:

mysql-server,mysql-client,mysql-common

和其他一些依赖。 我试图运行一个

apt-get update apt-get upgrade

一切正常,直到升级过程遇到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客户端(这个想法是“我删除这个,然后重新从头安装它”),但是这个操作也失败了,同样的错误。 我试图清除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, eg /etc/mysql/my.cnf ii mysql-common-5.5 5.5.46-0+deb6u1 MySQL database common files, eg /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删除的结果

 ~# 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). 

任何人都可以帮我理解如何解决这个问题吗? 先谢谢你,西蒙娜

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

你需要做的是完全删除MySQL 5.5,然后安装在您的仓库中可用的最新版本。

这解决了我的问题,没有任何数据/configuration的损失:

 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 

无论如何,在尝试这个之前,我不能强调备份的重要性。

祝你好运

Debian在12月9日反向移植了MySQL 5.5.46。 从你所说的听起来像你一直在使用dotdeb存储库以及Debian的,dotdeb包含MySQL 5.5.38。 所以现在squeeze-lts包含一个你已经安装的软件包的更新包,它会尝试安装它。 但是这两个版本库似乎并没有就包名/冲突/依赖性达成一致,所以mysql-client-5.5(存在于两个版本库中)的升级冲突是由于dotdeb包mysql-client-core-5.5一无所知(所以从伍尔特的评论将无助,因为没有什么可升级)。

一般来说,我绝不会运行强制安装,即使有什么build议你应该:)如果你满意从挤压的5.5.46,那么我build议你尝试卸载任何5.5.38版本的软件包,例如mysql-client-core-5.5,不是mysql-client,然后是mysql-client-5.5,然后是mysql-common – 希望这将是可能的,没有冲突,虽然我不能确定,对不起。 如果它确实起作用,那么你的删除和读取的想法听起来确实是一个很好的,以确保它是干净的安装。

如果dotdeb将版本库更新到更新的版本,而不是挤压版本,这一切可能会重新发生一遍,一般来说,如果你从第三方回购如dotdeb得到的东西,你从那里钉的软件包,使他们不会被核心存储库中的更改覆盖。