我的总体升级进展顺利,但是我遇到了一个无法解决的严重问题,即mysql服务器无法自行安装,并且我没有尝试使其正常工作。尝试安装/重新安装它时:

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)


我尝试完全删除它,尽管这样做是因为依赖项(?)试图安装MariaDB。任何有关我可以做些什么来解决此问题的建议都将受到欢迎。

编辑: /+source/mysql-5.7/+bug/1573279

评论

我在这里有同样的问题。

必须卸载phpmyadmin,这以某种方式导致了依赖性问题。重新安装后,一切恢复正常。

从Ubuntu 14到do 16的do-release-upgrade执行从MySQL 5.5到5.7的不受支持的升级,因此预计MySQL会在之后被破坏,如下所示:bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/ + bug / ...

@MarcoMarsala我不知道是否可以说MySQL在Ubuntu 14到16升级后会崩溃,尽管我认为这取决于您的观点。对于普通用户而言,当然不希望LTS升级中断像MySQL这样的事情。令人惊讶的是,尽管在测试过程中没有发现它。

apt install phpmyadmin --reinstall修复了上面的问题,之后无需接触mysql ... go Figure

#1 楼

@ andrew-beerman发布的说明在正确的轨道上,尽管它们对我来说并不十分清楚,并且似乎建议的内容超出了必要。我整理了以上答案,并在bug线程中写了一篇很有帮助的文章。

这些是我纠正此问题所采取的步骤:




my.cnf file中备份/etc/mysql并删除或重命名

sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak



使用

sudo rm -r /etc/mysql/mysql.conf.d/
删除文件夹/etc/mysql/mysql.conf.d/


验证您没有将my.cnf文件保存在其他地方(我在主目录中保存!)或在/etc/alternatives/my.cnf中使用

sudo find / -name my.cnf



备份并删除/etc/mysql/debian.cnf文件(不确定是否需要,但以防万一)

sudo mv /etc/mysql/debian.cnf /etc/mysql/debian.cnf.bak
sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7
sudo apt install mysql-server



如果系统日志显示错误,例如“ mysqld:无法读取'/etc/mysql/conf.d/'的目录”创建一个符号链接:

sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d


那么该服务应该能够从sudo service mysql start开始。


就可以了!

评论


经过所有这些操作(我之前做过),我仍然遇到相同的错误问题...

– Serge P
16年4月29日在14:05

您必须从/ etc / mysql目录中删除所有my.cnf。*。查找my.cnf.backup,my.cnf.fallback和my.cnf.migrated-所有这些文件也必须删除(首先备份!)

– hitzi
16年5月3日在8:51

@SergiiP sudo find / -name“ my.cnf”可能派上用场。

– starbeamrainbowlabs
16年5月14日在11:31

mysql-server-core-应该是mysql-server-core-5.7。否则就像一个魅力。谢谢!

– David Tay
16年5月20日在12:56

+1。你让我很快乐!也是早晚!我卡住了。

– Max Yudin
16年7月7日在17:44

#2 楼

今天,在尝试了许多解决方案之后,我遇到了同样的问题,我发现问题是我曾经用来禁用MySQL自动启动的命令sudo systemctl disable mysql.service,因此要使其正常工作,我再次使用命令sudo systemctl enable mysql.service重新启用了MySQL服务器并再次运行升级过程,它完美终止。

评论


我遇到了同样的问题,同样的解决方案对我也起作用。

–艾伦
16年4月26日在15:13

为我工作。在这里做了所有解决方案之后,mysql在此解决方案之后工作了。

–BłażejMichalik
16年4月29日在14:51

同样在这里-这应该是最高职位。

– a1字母数字
16 Sep 15 '14:32

也为我工作!非常感谢。明确地说,运行:sudo systemctl enable mysql.service,然后运行sudo apt install -f。

–费尔南多·帕拉迪尼(Fernando Paladini)
17年1月25日,0:03



这就是我要做的。我已禁用自动启动,如@naruto所述。我启用了自动启动并运行“ sudo apt upgrade”。现在已修复。应该是最佳答案。这是一个更简单,更标准,更不易出错的解决方案。

–杰克·霍尔特(Jack Holt)
17年8月7日16:00



#3 楼

您的错误消息包含以下行:

subprocess installed post-installation script returned error exit status 1


但是,此installed post-installation script并未被提及。经过大量修改后,我发现它的名称是(以我为例)/var/lib/dpkg/info/mysql-server-5.7.postinst

使用sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst或您喜欢的编辑器打开此文件。

在顶部,将第3行(或类似内容)从set -e更改为set -x,保存文件。 (选项-e为“错误退出”,-x表示“明确显示已执行命令”)。

运行sudo dpkg --configure -a --log /tmp/dpkg.log
(--log选项为可选)。如果您知道它将是唯一要升级的软件包,也可以直接运行apt upgrade

现在您将获得mysql-server-5.7.postinst bash脚本的详细输出,并且可以找出问题所在。

就我而言,它尝试(重新)运行mysql_upgrade失败,但是对于我的自定义mysql安装来说并不需要。我确定我之前已经成功手动运行过,而且一切都很好。

所以我对321行(对较早的mysqld版本尝试281行)表示赞赏,

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

以及之前失败的命令sudo apt upgrade(再次运行),成功完成,并且dpkg删除了此程序包的错误状态。 set -xset -e(如上所述)。并且可以选择取消注释mysql-upgrade行。

如果将mysql数据分区移动到非标准位置,则可能需要额外的工作。我通过symlink将我的产品从/var/lib/mysql/data移到了其他驱动器。然后,可能需要在postinst脚本操作之前临时删除符号链接。然后,在运行软件包升级后重新创建它。

在mysqld debian软件包的下一个次要版本升级之后,/var/lib/dpkg/info/mysql-server-5.7.postinst脚本的此问题可能再次出现。

评论


我最终清除了所有内容,然后下载社区mysql服务器版本,并从此处手动安装:dev.mysql.com/downloads/mysql

– RyanNerd
16年9月1日在19:34

完全一样的事情发生在我身上,而您的步骤解决了它。对我来说,我的mysql_upgrade调用位于第320行。您能解释一下为什么从postinst脚本调用时它返回非零值的原因吗?

–emiliopedrollo
16 Sep 24 '18:28



@emiliopedrollo不,我不能在这里解释。但是我认为现在的行号是320,因为最近软件包维护者增加了postinstall脚本,前几天在软件更新程序的最后一次运行(包括一个新的mysql-deb-package)中,我观察到了同一件事。 。

–knb
16 Sep 24 '19:25



谢谢!使用set -e,我可以解决确切的问题-MySQL无法访问/etc/mysql/debian.cnf中指定的ubuntu系统用户。因此,我将此用户添加到MySQL并授予了特权,再次运行dpkg并成功了!

–艾伦·汉密尔顿
17-4-24在5:17



#4 楼

此处的说明将其修复在我的服务器上:https://bugs.mysql.com/bug.php?id=72722


我可以理解使系统处于不一致状态的痛苦
,但不要担心整体情况,并逐步进行操作
以使系统清洁。 br />使用:dpkg -l | grep mysql(请粘贴输出,但不包括last
列)

第一列表示软件包的当前状态。这是
可能的选项:

ii)已安装rc)删除了保留的配置文件(这应该是您使用'apt-get删除的所有软件包的状态


不会删除/ etc下的配置文件)

为此,您需要运行'apt-get purge '直到
在上面的列表中没有看到任何软件包。

请记住,某些非mysql服务器软件包,例如
python-mysql.connector和python-mysqldb,如果已安装,则不需要被删除
,因为它们对这种情况没有任何影响,但是如果
被删除可能会给使用它们的应用程序带来麻烦。

我们一定会尝试重新访问我们的文档以了解我们如何
保护用户免遭此麻烦。感谢您与我们分享
您的反馈意见。


评论


感谢dpkg -l | grep mysql。它有助于了解方向。

– Max Yudin
16年7月7日在17:47

该命令用于清除错误,它必须是sudo apt-get purge 我通过编辑对其进行了修复,但:我为<使用了Unicode字符,因为否则将无法显示。被警告复制粘贴此命令

– Toskan
19年7月27日在6:37

#5 楼

就我而言,使用strace时,我发现/ var / run / mysqld /不存在,并且mysqld无法创建文件mysqld.sock。

这些命令解决了我的问题:

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld


现在:

systemctl start mysql


mysql再次工作:)

评论


我建议您将这些行添加到/ usr / share / mysql / mysql-systemd-start,从第25行开始,然后您不必在每次重新启动后重新创建此目录(抱歉,该行返回在此注释中不起作用) :如果[! -d / run / msyqld];然后mkdir -p -m0755 / run / mysqld || {echo“无法创建/ run / mysqld”; 1号出口; } chown mysql:mysql / run / mysqld || {回声“无法chown / run / mysqld”; 1号出口; } fi

–scoobydoo
16 Jun 30'14:44



#6 楼

就我而言,我可以通过在/etc/apparmor.d/local/usr.sbin.mysqld中添加

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,


解决问题。有关更多详细信息,请查看我的回答(作者ChristophS)在stackoverflow上。

#7 楼

我遇到过同样的问题。我尝试多次重新安装mysql,但没有成功。

我发现问题出在我身上,另一个mysql进程已经在运行。

在详细信息:

我仔细阅读了/var/log/mysql/error.log的日志后,发现:


[错误]无法启动服务器:在TCP / IP端口上绑定:地址已经在
中使用

[错误]您是否已经在端口上运行了另一台mysqld服务器:
3306吗?应用程序已经在使用该端口。

我使用ps -aux | grep 3306对其进行了检查: br />然后我启动了mysql:sudo kill -15 14706

最后mysql对我有用!希望对大家有帮助。

#8 楼

对于WSl Ubuntu 16.04版本,我在这里找到了此有用的文章

已解决的步骤


sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst
查找此行mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?
将此service mysql restart直接添加到数字2的行上方。 />希望获得帮助

#9 楼



我最后转到Oracle下载页面,下载mysql-apt-config_0.8.8-1_all.deb,并从Oracle repo安装MySQL:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server


评论


安装->安装错字。愚蠢的SO不允许我纠正一个字符。

–Csaba Toth
18年7月11日在16:54

你为什么去oracle下载mysql

–Sinscary
19年8月7日在8:40

@Sinscary这个答案是从前传来的,但这可能是因为它们的版本比系统软件包管理器的版本新?

– ostrokach
19年8月7日在15:42



#10 楼

我现在在一些服务器上遇到了问题
修复程序可以运行
apt install phpmyadmin --reinstall

,它解决了上面的问题(此后无需再触摸mysql)