一、问题出现背景
我是跟着http://t.csdnimg.cn/17jti这个博主的这篇帖子按照步骤安装的,并进行了数据库密码的设置和允许用户名为root用户不限ip登录数据库。然后后续设置开机MySQL自启动跟着这个博主的这个帖子http://t.csdnimg.cn/kxGTv完成的。但是当我重启虚拟机之后,发现MySQL服务消失了。
二、问题解决办法
直接原因我没有探究究竟是哪个。以下都是我做的尝试。
2.1 感觉是最关键的步骤
最开始那个博主的安装帖子里,他把配置文件的my.cnf中的socket放在了/tmp目录下,所以在我重启后,随着/tmp目录下的该文件消失,MySQL就启动不了了。(后续经过验证由安全模式下启动可以重启,mysql_safe)。它提示找不到/usr/local/mysql... 最开始我的安装目录是自己建立的,我放在了/app/mysql/目录下,顺着这条错误提示,我就在想是不是Centos7里默认mysql的安装位置就在/usr/local中,就是我没有把mysql放在他认为的目录里,所以导致了报错,于是我把/app/mysql移动到了/usr/local目录下,然后重新修改配置文件,重新初始化数据库,不管是安全模式命令mysqld_safe还是support-files/mysql.server start 启动都能运行MySQL了,而且关机后重启,MySQL服务也自启动了。
2.2 做出的其他尝试
最初肯定是以为在配置文件中把socket目录修改然后初始化就行了,因为之前认为的原因是/tmp目录下保存的socket信息被自动删除了。但是我初始化后没有启动mysql服务,即没有用安全模式启动MySQL服务,直接想进入数据库,结果自然是不行的。但是有一次这样启动后发现,我自己设置的socket保存位置在重启虚拟机后消失不见了。也就是说重启一次机器,就得重新初始化,然后重新用安全模式启动MySQL服务。这未免有点太费事儿了,与其这样不如直接按照上面的错误提示放在/usr/local目录下。
还有在每次我进行尝试出错地方的时候,我都把添加的MySQL自启动服务都关掉了,我是控制了一下变量,所以问题是不是出在这里,我也不能断定,但是mysql换了位置,之前的快捷绑定 mysql_server启动方式应该也是不能用的,所以保险起见还是先删除了这个服务,然后再从启动服务,绑定自启动来一遍。
chkconfig --remove mysqld # 解绑自启动服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 重新绑定
chmod +x /etc/init.d/mysqld # 赋予可执行权限
chkconfig --add mysqld # 加入自启动服务
ps -aux|grep mysqld # 开机查看自启动服务
三、有趣的地方
我以为两种启动方式会有所不同,奇怪为什么要设计mysqld_safe和mysql_server 两种启动方式,后续经过查阅资料得知,似乎mysql_server启动时自己调用了mysqld_safe启动。所以没区别。但是再新启动服务和关机后自启动服务,他们之间的进程是有一点差别的。如下如所示。
这个是刚用安全模式启动的mysql进程查询
这个是重启虚拟机开机自启动的进程查询
我猜是自启动会搜寻上一次启动的信息,所以会有所不同。 不管怎么说,这个问题是解决了,但是也花了一下午的时间,排查错误真的耗时。