dpkg: 处理软件包mysql-server时出现依赖问题错误

39

当我尝试安装 mysql-server 时,会出现一个错误:

dpkg: error processing package mysql-server (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

这是什么意思?有任何想法吗?

17个回答

70

dpkg 返回错误代码 1 并不意味着任何具体的问题,但通常与依赖关系有关。在您的情况下,您尝试安装相同软件包的两个版本/实例,即mysql-servermysql-server-5.7。因此,请执行以下操作以消除任何多余的依赖关系问题并安装一个可运行的mysql软件包

sudo apt-get clean
sudo apt-get purge mysql*
sudo apt-get update
sudo apt-get install -f
sudo apt-get install mysql-server-5.7
sudo apt-get dist-upgrade

这应该解决手头的问题。但是在未来,在sudo apt-get install之后添加软件包名称时请注意,因为错误的软件包名称列表(例如列表中的冗余条目)会导致无法安装任何一个软件包,甚至更糟的是 - 你可能会发现自己陷入了依赖地狱的深渊。


4
我喜欢你在所有操作之前运行apt clean,这应该被宣传。太多教程说要清除软件包、更新APT或强制安装等等,然后再运行apt autoclean,这有时是毫无意义的(反向和/或不够有效),因为在重新安装等操作之前应该先清空软件包缓存…… - Jesse Nickles
2
sudo apt-get install mysql-server-5.7 应该使用 sudo apt-get install -f,不是吗?至少在我的机器上是这样的情况。 - woodz
1
如果服务器的RAM不足,请参考下面的VPS答案。 (运行mysql + apt升级=> mysql崩溃) - Teson

27

我能够找到的所有与此问题相关的答案都是“清除您的Mysql安装并重新安装它”的形式。但在我的情况下,我已经安装了一个可工作/活动的Mysql。对我而言,dpkg --configure -a失败的原因是因为Mysql已经安装。为什么dpkg认为需要运行我的已安装和升级的Mysql的postinstall脚本,我可能永远不知道,但确实如此。

经过长时间的搜索,我找到了一个解决方案,如果有其他人已经有一个工作的Mysql 5.7,并且只想通过虚假的postinstall脚本,请执行以下操作:直接编辑postinstall脚本(在Ubuntu上):

sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst

然后,在第二行上,只需添加exit 0,然后再次运行dpkg,您应该会得到类似于:

$ sudo dpkg --configure -a         
Setting up mysql-server-5.7 (5.7.28-0ubuntu0.18.04.4) ...

如果您的 Mysql 安装之前没有完成 (后安装脚本坚持要运行就是有原因的) ,那么您绝不想按照这些指示进行操作。但对于可能遇到 dpkg 处于混乱状态的人,比如我一样,上述步骤可以帮助您节省大量时间,而无需卸载和重新安装已经正常工作的 Mysql 版本。


这对我解决了问题,谢谢!我在升级过程中遇到ssh崩溃,像个笨蛋一样没有使用screen。所以当我重新登录时,安装后的操作无法正常工作。 - ezwrighter
似乎原始问题(错误消息)是一个通用问题。对我来说,这个答案解决了我的问题。清理所有内容并重新安装并不能解决我的问题,并引入了还原数据库的额外任务。 - zhouji
这对我也解决了问题。 - Erel Segal-Halevi
是的,这对我来说是解决方案! - Rorrim

14

这应该会有所帮助

sudo apt-get purge mysql*
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get dist-upgrade

现在重新安装 mysql

sudo apt-get install mysql-server

9

如果您使用的是VPS或类似设备,错误可能是由于RAM不足造成的。

运行apt-upgrade需要一些RAM,因此可能会强制关闭mysql,导致从错误中恢复的问题。

请尝试:

1)在任何apt-upgrade之前手动停止mysql

sudo /etc/init.d/mysql stop

2) 解决:

sudo dpkg --configure mysql-server-X.X

如果版本不清楚,请使用mysql-server来查找(不会修复错误)。

3)检查:

sudo apt-get upgrade

如果apt没有启动mysql,则需要手动启动。


2
你说得对。我使用了VPN,1.5 GB的内存在Google云计算中可以工作。但是在免费层级小于1 GB时无法工作。 - Rofie Sagara

5

由于我从Ubuntu 18.04升级到Ubuntu 20.04时出现了问题,导致我遇到了同样的错误。我的解决方法是使用Mariadb,同时确保在执行"purge mysql"命令时,如果要求您删除目录中的数据库,请告诉它不要删除数据库,这样您就可以保留旧的数据库,而不会丢失数据。

我所做的是以下命令:

sudo apt-get purge mysql*
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get dist-upgrade
sudo apt-get install mariadb-server

4
我的答案来自于 askubuntu

新回答

终止 mysql 守护程序并进行清除操作可以解决问题。

sudo pkill mysqld # kill
sudo apt-get purge mysql-server-5.7 # Or whatever you are trying to purge.

感谢@endrias的建议。

旧回答

我尝试了所有的apt方法,但都不起作用,试试这个:

找到锁定进程

$ ps -eaf
root      7316     1  0 00:19 ?        00:00:00 /usr/bin/dpkg --status-fd 35 --configure --pending
root      7808  7316  0 00:19 ?        00:00:00 /usr/bin/perl -w /usr/share/debconf/frontend /var/lib/dpkg/info/mysql-se
root      7817  7808  0 00:19 ?        00:00:00 /bin/bash /var/lib/dpkg/info/mysql-server-5.7.postinst configure
mysql     7973  7817  0 00:20 ?        00:00:00 mysqld --user=mysql --init-file=/var/lib/mysql-files/tmp.iNyY06ty0K --so

终止进程

执行sudo kill -9 7973,这将终止mysql进程。

现在清除

sudo apt-get purge mysql-server-5.7 # Or whatever you are trying to purge.

如果正在运行的 mysql 进程阻止了任何修复操作,您可以使用 sudo pkill mysql 来杀死 mysql 守护进程,而不是通过获取 ps -eaf 输出的 PID 的迂回方式。pkill 会为您获取 PID - endrias

4

我曾遇到过类似问题,以下是我解决的方法:

  1. 重启MySQL服务 sudo service mysql restart
  2. 修复损坏的安装 sudo apt install -f

2

我尝试了几乎所有可能的方法,但都没有起作用。然后我发现我面临的问题是由于可用内存不足造成的。您可以通过free -h检查当前内存状态(在我的情况下,可用内存少于1 GB)。要清除内存,请重新启动设备。然后输入以下命令:

sudo apt-get purge mysql*
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get dist-upgrade

然后,通过以下方式重新安装mysql-server

sudo apt-get install mysql-server

1

In my case I had to run:

systemctl stop mysql.service

在能够无误安装 MySQL 的情况下,需先停止 MySQL,使用以下命令:

sudo apt-get install mysql-server

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接