Ubuntu 16.04 + MySQL 8.0-由The driver has not received any packets from the server引发的一系列错误,以及最后的解决方案

按照惯例,遇到Linux相关的问题先说系统版本,我用的是Ubuntu 16.04。

事情的起因是这样的,把打了个jar包扔上服务器,然后nohup java -jar运行,本来一切正常(之前一直都很正常),但这次报了个没见过的错:

The driver has not received any packets from the server。

网上查了一下说是连接超时,然后我就想着打开MySQL去改一下设置,结果发现MySQL连不上了,运行mysql -u root -p报错:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)。

然后我就按照网上的说法,删掉了/tmp/mysql.sock和/tmp/mysql.sock.lock,然后systemctl restart mysql重启MySQL,结果这次连MySQL服务都没法启动了,报错:

The server quit without updating PID file.

看起来是删文件删出问题了。网上资料基本上是基于5.x的,而MySQL到了8.0之后发生了很大变化,没有找到一个能用的方案。

有人说删掉data目录下ib开头的文件可以解决,我试了一下,除了会导致启动报错之外并没有什么效果。后来查了一下资料才知道,ib开头的文件和InnoDB引擎有关系。

中间还出现了几次not found的错误,后来发现只是因为没有权限而已,chmod一下就好了;但是仍然无法启动,还是那个PID file的报错。

后来看到有人说删掉data重新初始化可以解决,我就试了一下,从某种程度上来说确实算是解决了,因为按照这个流程操作之后,MySQL是可以运行了,但是MySQL的服务仍然是挂掉的,会报错:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)。

只能说治标不治本,而且root用户的密码还是空的:

rm -rf data
bin/mysqld --initialize-insecure
bin/mysqld -u root &

实在没办法,先是想着能不能把MySQL的系统服务删掉或者改一下,改成启动改过的命令,后来发现不是很好弄,就想着干脆卸载重装算了。

在准备卸载的过程中,看到官网上的安装流程,想着覆盖一下mysql.server是不是能弄好:cp support-files/mysql.server /etc/init.d/mysql.server,后来发现也没啥用……

rm -rf mysql之前,我想着再最后挣扎一下,因为整个流程中还有一个地方没有检查过,就是mysql用户的权限。打开/etc/passwd之后,把mysql用户的权限改成0,也就是给它root权限,保存之后重新启动服务,它好了……

问题算是解决了,但为什么呢?如果有人知道,请不吝赐教。

发布了110 篇原创文章 · 获赞 132 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/HermitSun/article/details/104241778