我的整体升级进展顺利,但留下一个严重的问题,mysql-server 无法自行安装,而且我尝试的任何方法都无法使其工作。
这是我尝试安装/重新安装时看到的错误:
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
答案1
@andrew-beerman 发布的说明是正确的,尽管它们对我来说不太清楚,而且似乎推荐了不必要的内容。我把上面的答案和 bug 帖子中的一篇有用的帖子拼凑在一起。
以下是我纠正此问题所采取的步骤:
备份您的
my.cnf file
in/etc/mysql
并删除或重命名sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
/etc/mysql/mysql.conf.d/
使用删除文件夹sudo rm -r /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
。
它开始工作了!
答案2
今天我遇到了同样的问题,在尝试了许多解决方案之后,我发现问题出在sudo systemctl disable mysql.service
我用来禁用 MySQL 自动启动的命令上,因此为了使其正常工作,我使用该命令重新启用了 MySQL 服务器sudo systemctl enable mysql.service
并再次运行升级过程并且它完美终止。
答案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
如果您知道它是唯一需要升级的包,您也可以直接运行。
现在您可以获得 bash 脚本的详细输出mysql-server-5.7.postinst
,并且可以找出问题所在。
就我而言它尝试(重新)运行mysql_upgrade
,但没有成功,但这对于我的自定义 mysql 安装来说并不是必需的。我当然我之前已经手动运行过它,成功了,一切都很好。
因此我注释掉了第 321 行(对于较旧的 mysqld 版本,请尝试第 281 行),
#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?
并且之前失败的命令sudo apt upgrade
(再次运行)成功完成,并且 dpkg 删除了此包的错误状态。
现在您可以将 重新设置set -x
为set -e
(如上所述)。并可选择取消注释 mysql-upgrade 行。
如果您将 mysql 数据分区移至非标准位置,则可能需要进行额外的工作。我/var/lib/mysql/data
通过符号链接将我的数据分区移至另一个驱动器。然后,您可能需要在postinst
脚本操作之前暂时删除符号链接。然后在运行软件包升级后重新创建它。
在 mysqld debian 包的下一次小版本升级之后,该/var/lib/dpkg/info/mysql-server-5.7.postinst
脚本的问题可能会再次出现。
答案4
就我而言,使用 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 又能正常工作了 :)