mysql.service在列表中显示缺失-安装失败

7

我正在使用Ubuntu 17.04操作系统。

简而言之,在与MariaDB斗争一段时间后,我按照一些可疑的建议尝试完全删除家庭服务器上的MySQL和MariaDB。现在我无法重新安装mysql-server,当我尝试时会出现以下错误:

Failed to stop mysql.service: Unit mysql.service not loaded.
invoke-rc.d: initscript mysql, action "stop" failed.
invoke-rc.d returned 5
There is a MySQL server running, but we failed in our attempts to stop it.
Stop it yourself and try again!

所以我使用sudo service --status-all | grep mysql检查服务,果然...
[ - ]  mysql

问题是,当我尝试运行sudo service mysql status时,出现以下结果:
Unit mysql.service could not be found.

我希望您能帮忙安装并恢复MySQL的运行,但不想进行全新安装!如有帮助,请告知。

进程可能已经僵死了?你可能需要重新启动并重试。 - Paul T.
1
我也这么想。我重新启动了几次。此外,“ps aux | grep mysql”没有显示任何内容。 - PortableStick
2个回答

21

看起来我弄明白了。虽然没什么意义,但是我明白了。首先,我询问 dpkg 是否还有任何 mysql 包存在:

sudo dpkg --get-selections | grep mysql

没有任何结果,所以我检查了MariaDB:

sudo dpkg --get-selections | grep maria

这显示了一些标记为要卸载的软件包。

mariadb-client-10.1                             deinstall
mariadb-common                                  deinstall
mariadb-server-10.1                             deinstall

由于apt没有配合,我使用dpkg -P卸载了每个软件包。一旦我这样做并重新启动,mysql就不再列为服务,并且mysql-server成功安装。希望这能节省其他人的时间。


2
感谢您发布您的发现! - Paul T.
谢谢你的回答 ---> "我使用dpkg -P卸载了每一个软件包" ---> 你是如何做到的? - BenKoshy

2

dpkg -P 的方法对我无效,但下面的步骤有效。简要概述如下:

MariaDB 和 MySQL 之间存在一些交互作用,这会阻止在卸载过程中删除 /etc/init.d/mysql 文件。这会导致 MySQL 无法完全卸载或重新安装。如果您手动删除此文件,然后重复卸载操作,事情应该可以解决。但是,我花了一段时间才得出这个结论,并且系统已经发生了变化,因此我没有直接尝试这个方法。以下是适用于基于 apt 的系统的完整步骤。

/var/lib/dpkg/info 中,您将找到相关的软件包:

# cd /var/lib/dpkg/info
# ll | grep -i mariadb
# ll | grep -i mysql

包含一组后缀的软件包,例如 .preinst.prerm 等等。如果有一个名为 php8.1-mysql.prerm 的文件,那么可以将该软件包卸载。
# dpkg --purge --force-all php8.1-mysql

最终,你只剩下了mysql-server-8.0,它无法被删除,并且会出现问题中的错误信息。这包含了:
if [ -z "${DPKG_ROOT:-}" ] && [ "$1" = remove ] && [ -x "/etc/init.d/mysql" ] ; then
    invoke-rc.d mysql stop || exit 1
fi

问题在于卸载时未能删除 /etc/init.d/mysql 文件。请手动删除该文件,然后再次执行卸载操作。
现在可以安装 mysql-server。这个步骤完成后,可能并不是每个东西都会在第一次尝试中安装成功 - 您需要清除apt缓存或类似的东西,我记不清具体细节了。

/etc/init.d/mysql没有被卸载删除,这是正确的。 - Tuyen Nguyen

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