16.04升级破坏了mysql-server


127

我的总体升级进展顺利,但是我遇到了一个严重困扰的问题,即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。我将为解决此问题提供任何建议,这将是非常受欢迎的。

编辑:看起来我不是唯一的一个:https : //bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279


在这里有同样的问题。
KernelPanic '16

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

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

1
@MarcoMarsala我不知道我们是否可以说,它预计 MySQL的Ubuntu的14到16升级之后被打破,但我想这取决于你的观点。对于普通用户而言,肯定不会像MySQL这样的LTS升级中断。令人惊讶的是,虽然在测试过程中没有发现它。
TheGremlyn

apt install phpmyadmin --reinstall修复了上面的问题,之后无需触摸mysql ...图
Andy

Answers:


119

@ andrew-beerman发布的说明在正确的轨道上,尽管它们对我而言并不十分清楚,并且似乎建议的内容超出了必要。我整理了上面的答案,并在bug线程中提供了有用的帖子。

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

  1. 备份您my.cnf file的内容/etc/mysql并删除或重命名

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. /etc/mysql/mysql.conf.d/使用删除文件夹

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. 确认您没有将my.cnf文件保存在其他地方(我在家庭目录中保存!)或正在/etc/alternatives/my.cnf使用中

    sudo find / -name my.cnf
    
  4. 备份和删除/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
    
  5. 如果您的系统日志显示类似“ mysqld:无法读取'/etc/mysql/conf.d/'的目录”之类的错误,请创建一个符号链接:

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

    然后该服务应该可以从开始sudo service mysql start

这样就可以了!


17
在所有这些操作之后(我之前做过),我仍然遇到相同的错误问题……
Serge

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

8
@SergiiP sudo find / -name "my.cnf"可能派上用场。
starbeamrainbowlabs

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

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

56

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


5
我遇到了同样的问题,并且相同的解决方案对我有用。
艾伦·

5
为我工作。在这里做了所有解决方案之后,mysql在此解决方案之后工作了。
Błażej米哈利克

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

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

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

20

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

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 -eset -x,以保存文件。(选项-e是“错误退出-x”,大概意味着“明确显示命令已执行”)

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

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

在我的情况下,尝试(重新)运行未成功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数据分区移动到非标准位置,则可能需要额外的工作。我/var/lib/mysql/data通过symlink 将我的驱动器从另一个驱动器移到了另一个驱动器。然后,您可能必须在postinst脚本操作之前临时删除符号链接。然后在运行软件包升级后重新创建它。

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


我结束了清除一切,然后下载社区的MySQL服务器版本,并从这里手动安装:dev.mysql.com/downloads/mysql
RyanNerd

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

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

谢谢!通过这样set -e我可以解决确切的问题-MySQL不能访问在中指定的ubuntu系统用户/etc/mysql/debian.cnf 。因此,我将此用户添加到MySQL并授予了权限,dpkg再次运行就可以了!
艾伦·汉密尔顿

17

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

我可以理解使系统处于不一致状态的痛苦,但是不必担心整个情况,并逐步采取措施来清理系统。

首先,使用dpkg -l |查看机器上所有mysql软件包的当前状态。grep mysql(请粘贴输出(不包括最后一列))

第一列表示包装的当前状态。以下是可能的选项:

ii)已安装rc)保留了已删除的配置文件(这应该是您使用“ apt-get remove”删除的所有软件包的状态,“ apt-get remove”不会删除/ etc下的配置文件)

为此,您需要运行“ apt-get purge <pkg-name>”,直到在上面的列表中看不到任何软件包为止。

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

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


2
谢谢你dpkg -l | grep mysql 。它有助于了解方向。
Max Yudin

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

3

就我而言,使用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 || {echo“无法对/ run / mysqld进行chown;1号出口;} fi
scoobydoo

3

就我而言,我可以通过添加来解决问题

# 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,

/etc/apparmor.d/local/usr.sbin.mysqld

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


0

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

我发现对我来说问题是,另一个mysql进程已经在运行。

详细说明:

我仔细阅读后登录/var/log/mysql/error.log,发现:

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

[错误]您是否已经在端口3306上运行了另一个mysqld服务器?

似乎另一个应用程序已在使用该端口。

我使用ps -aux | grep 3306以下方法进行了检查:

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

我杀死了正在运行的过程 sudo kill -15 14706

然后我启动了mysql: /etc/init.d/mysql start

终于mysql对我有用!希望对您有所帮助。


0

此页面上的答案均不适合我。

我最终转到Oracle下载页面mysql-apt-config_0.8.8-1_all.deb从Oracle存储库下载并安装MySQL:

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

2
isntall-> install错字。愚蠢的SO不允许我纠正一个字符。
Csaba Toth

您为什么要去oracle下载mysql
Sinscary,

@Sinscary这个答案有一段时间了,但这可能是因为他们的系统版本比系统软件包管理器要新吗?
ostrokach

0

我现在在一些服务器上遇到了问题,解决方法是运行apt install phpmyadmin --reinstall

解决了上述问题(此后无需触摸mysql)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.