我运行 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)获取某些东西,你就从那里固定软件包,这样它们就不会被核心存储库中的更改所覆盖。