按照惯例,遇到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权限,保存之后重新启动服务,它好了……
问题算是解决了,但为什么呢?如果有人知道,请不吝赐教。