根本上解决mysql启动失败问题Job for mysqld.service failed because the control process exited with error code.

2年前 (2022) 程序员胖胖胖虎阿
278 0 0

先说结论,这问题出现的根本原因就是权限问题,但不限于是某个特定的文件,而是与mysql相关一系列文件。

错误回顾

首先,我在云服务器上默认安装了mysql数据库,它可以正常工作,但由于它默认安装在系统盘中,存储空间较小,于是接着我把它迁移到数据盘(挂载在/data目录下)上,做法是把mysql数据存储目录/var/lib/mysql/移动到了目录/data下,但mysql还有日志文件/var/log/mysql/mysqld.log和进程运行pid文件/run/mysqld/mysqld.pid,它两比较分散,为了方便查找,我把日志文件和进程运行文件全移到了/data目录下,且对mysql配置文件/etc/my.cnf进行了更改。

此时/data目录下的结构如下:

/data
├── log/mysql/mysqld.log        日志文件
├── mysql/xxx
└── run/mysqld/mysqld.pid       mysql运行进程pid文件

根据相关教程,我将/data/mysql/目录加入了mysql访问组。

chown -R mysql:mysql /data/mysql

紧接着,我就重启了mysql,然而此时就出现了上述问题,在反复检查自己的操作后,发现并没有落下什么步骤,对于这个问题百思不得其解。网上很多帖子都是说权限什么的问题,很多教程都是copy的别人的,所以有用的信息比较少,基本就是给出两种解决方案,

  1. chown -R mysql:mysql /data/mysql
  2. chmod -R 777 /data/mysql

第1种已经尝试过了,不可行。
第2种方法简直就离谱,我都怀疑这人可能没解决这问题,瞎搞,人家默认安装时都没有给/var/lib/mysql/全部赋予可执行权限,他这直接给整个目录赋予可执行权限了,没有什么作用。

解决办法

在不断看了许多帖子之后,受到了一些启发,突然想到了可能的解决方法,既然mysql启动时需要用到这么多文件,而我只把/data/mysql/加入了mysql访问组,那么是不是其他文件缺少权限呢?有了思路之后,我很快将日志文件所在目录/data/log和进程pid文件所在目录/data/run/加入了mysql访问组

chown -R mysql:mysql /data/log       将日志文件所在目录加入mysql访问组
chown -R mysql:mysql /data/run		 将mysql进程pid文件所在目录加入mysql访问组

最终问题得以解决。

总结

网上的很多帖子比较单一,虽然给出了针对他自身情况下的特定解决方案,有的之所以使用前面的chown -R mysql:mysql /data/mysql命令可行,是因为他没有将其他文件进行移动,且配置文件/etc/my.cnf没有改动其他文件的存放路径,但并没有指出根本原因,很多人情况可能不一样,因而在文件稍有变动时,其方法可能失效。
固比较通用的方法是根据自己安装时的文件变动情况去对症下药地赋予权限。

相关文章

暂无评论

暂无评论...