16.04升级破解了mysql-server
我的整体升级进展顺利,但我留下了一个棘手的问题,即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
@ andrew-beerman发布的说明在正确的轨道上,虽然它们对我来说不是很清楚,似乎推荐的不仅仅是必要的。 我拼凑了上面的答案和bug线程中的一个有用的post。
这些是我为纠正这个而采取的步骤:
-
在
/etc/mysql
备份my.cnf file
并删除或重命名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
文件(我在家里做了dir!)或在/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
-
如果您的syslog显示错误,例如“mysqld:无法读取’/etc/mysql/conf.d/’的dir”,请创建一个符号链接:
sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
然后服务应该能够以
sudo service mysql start
。
这让它运作了!
今天我遇到了同样的问题,在尝试了很多解决方案之后我发现问题是命令sudo systemctl disable mysql.service
,我用来禁用MySQL自动启动,所以为了让它工作我重新启用MySQL服务器使用命令sudo systemctl enable mysql.service
并再次运行升级过程并完美终止。
这里的说明修复了我的服务器: https : //bugs.mysql.com/bug.php?id = 72722
我可以理解让您的系统处于不一致状态的痛苦,但不要担心整个情况并逐步采取措施以使系统保持清洁。
首先让我们看看机器上所有mysql包的当前状态:dpkg -l | grep mysql(请粘贴不包括最后一列的输出)
第一列表示包的当前状态。 以下是可能的选项:
ii)已安装的rc)保留已移除的配置文件(这应该是您使用’apt-get remove’删除的所有软件包的状态,不会删除/ etc下的配置文件)
为此,您需要运行’apt-get purge’,直到您在上面的列表中看不到任何包。
请记住,一些非mysql-server软件包如python-mysql.connector和python-mysqldb(如果已安装)无需删除,因为它们对这种情况没有任何影响,但如果删除可能会给使用它们的应用程序带来麻烦。
我们一定会尝试重新访问我们的文档,看看我们如何保护用户免受此问题的困扰。 感谢您与我们分享您的反馈意见。
您的错误消息包含以下行:
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
选项是可选的)。 如果您知道它将是唯一将要升级的软件包,您也可以简单地运行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 -x
set -e
为set -e
(如上所述)。 并且可以选择取消注释mysql-upgrade行。
如果已将mysql数据分区移动到非标准位置,则可能需要额外的工作。 我通过符号链接将我的/var/lib/mysql/data
到另一个驱动器。 然后,您可能必须在postinst
脚本操作之前临时删除符号链接。 然后在运行包升级后重新创建它。
在mysqld debian软件包的下一个次要版本升级之后,/ /var/lib/dpkg/info/mysql-server-5.7.postinst
脚本的这个问题会再次出现。
在我的情况下,使用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再次工作:)
在我的情况下,我可以通过添加解决问题
# 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提供)。
本页面上的所有答案都不适合我。
我最终进入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
我遇到过同样的问题。 我试过几次重新安装mysql,但没有成功。
我发现对我来说问题是,另一个mysql进程已经运行了。
详情如下:
我仔细阅读了/var/log/mysql/error.log
日志后发现:
[ERROR]无法启动服务器:绑定TCP / IP端口:已在使用的地址
[错误]你是否已在端口上运行另一个mysqld服务器:3306?
看起来像另一个应用程序已经在使用端口。
我用ps -aux | grep 3306
检查了它 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适合我! 我希望它对某人有所帮助。