service mysql start 启动失败,日志报mysqld: File ‘./bin.index‘ not found (OS errno 13 - Permission denied)

解决方式: chown mysql:mysql -R /opt/apps/data/mysqldata
参考博客:

  1. mysqld: File ‘./mysql-bin.index’ not found (Errcode: 13 - Permission denied)
  2. MySQL启动失败 mysqld: File ‘./mysql-bin.index’ not found (Errcode: 13 - Permission denied)

服务器因断电停机,MySQL未设置自启动,需手动重启

查看MySQL进程,确定进程不存在

[root@localhost ~]# ps -ef | grep mysql
root      2264 22896  0 09:14 pts/3    00:00:00 grep --color=auto mysql

启动MySQL

[root@localhost ~]# service mysql start
Starting MySQL SUCCESS!

本以为启动成功,然鹅并没有

[root@localhost ~]# ps -ef | grep mysql
root      1083 22896  0 09:27 pts/3    00:00:00 grep --color=auto mysql

并且一系列操作都无法启动,还报错

[root@localhost mysql]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/opt/apps/tmp/mysql/mysqld.pid).
[root@localhost mysql]# service mysql stop
 ERROR! MySQL server PID file could not be found!

查看/opt/apps/tmp/mysql/mysqld.pid文件

[root@localhost mysql]# cd /opt/apps/tmp/mysql/
[root@localhost mysql]# ll
总用量 8
-rw------- 1 root root 5 3月  30 15:18 mysql.sock.lock
srwxrwxrwx 1 root root 0 3月  30 15:18 mysqlx.sock
-rw------- 1 root root 6 3月  30 15:18 mysqlx.sock.lock

并无mysqld.pid文件

备份mysql.sock.lock, mysqlx.sock.lock文件后删除

[root@localhost mysql]# cp mysql.sock.lock mysqlx.sock.lock /home/
[root@localhost mysql]# rm -rf mysql.sock.lock mysqlx.sock.lock
[root@localhost mysql]# ll
总用量 0
srwxrwxrwx 1 root root 0 3月  30 15:18 mysqlx.sock

启动,依然不行

[root@localhost mysql]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/opt/apps/tmp/mysql/mysqld.pid).
[root@localhost mysql]# ps -ef | grep mysql
root     28073 22896  0 09:52 pts/3    00:00:00 grep --color=auto mysql

还原后查看mysql.sock.lock, mysqlx.sock.lock文件

[root@localhost mysql]# cat mysql.sock.lock
9676
[root@localhost mysql]# cat mysqlx.sock.lock
X9676

新建mysqld.pid文件,内容为9676

[root@localhost mysql]# vi mysqld.pid
[root@localhost mysql]# ll
总用量 8
-rw-r--r-- 1 root root 0 4月   2 09:55 mysqld.pid
-rw------- 1 root root 5 4月   2 09:53 mysql.sock.lock
srwxrwxrwx 1 root root 0 3月  30 15:18 mysqlx.sock
-rw------- 1 root root 6 4月   2 09:53 mysqlx.sock.lock

启动,依然无效

[root@localhost mysql]# /etc/init.d/mysql start
Starting MySQL SUCCESS!
[root@localhost mysql]# ps -ef | grep mysql
root      1023 22896  0 09:57 pts/3    00:00:00 grep --color=auto mysql

此时的我有点小崩溃。。。

没办法,开始找日志文件位置,因为数据库并非本人安装,常规安装路径下有没有日志文件,说明安装时日志文件指向路径做过更改

查看/etc/my.cnf

[root@localhost apps]# cat /etc/my.cnf
[mysqld]
。。。
mysqlx_socket  = /opt/apps/tmp/mysql/mysqlx.sock
datadir  = /opt/apps/data/mysqldata
socket = /opt/apps/tmp/mysql/mysql.sock
pid-file = /opt/apps/tmp/mysql/mysqld.pid
log-error = error.log
slow-query-log = 1
slow-query-log-file  = slow.log
long_query_time = 0.2
log-bin  = bin.log
relay-log = relay.log
。。。

可以看到日志文件log-error=error.log,说明在同级目录下,但是与哪个文件同级无法确定,先去数据存储目录下看看

[root@localhost apps]# cd /opt/apps/data/mysqldata
[root@localhost mysqldata]# ll
总用量 1187696
-rw-r-----  1 mysql mysql        56 9月  28 2020 auto.cnf
-rw-r-----  1 mysql mysql 564958808 3月  16 10:03 bin.000014
-rw-r-----  1 root  root    3858980 3月  17 02:05 bin.000015
-rw-r-----  1 root  root   99555083 3月  30 15:18 bin.000016
-rw-r-----  1 root  root        196 3月  30 15:19 bin.000017
-rw-r-----  1 root  root        196 3月  30 15:19 bin.000018
-rw-r-----  1 root  root   15713352 4月   1 18:59 bin.000019
-rw-r-----  1 root  root         78 3月  30 15:19 bin.index
-rwxrwxrwx. 1 mysql mysql      1680 7月   6 2020 ca-key.pem
-rwxrwxrwx. 1 mysql mysql      1112 7月   6 2020 ca.pem
-rwxrwxrwx. 1 mysql mysql      1112 7月   6 2020 client-cert.pem
-rwxrwxrwx. 1 mysql mysql      1680 7月   6 2020 client-key.pem
drwxrwxrwx. 2 mysql mysql      4096 7月   6 2020 cluster_manager
drwxrwxrwx. 2 mysql mysql     20480 4月   1 14:21 datengxia
-rwxrwxrwx. 1 mysql mysql    149952 4月   2 10:01 error.log
-rw-r-----  1 mysql mysql     61065 11月  2 14:59 ib_buffer_pool
-rwxrwxrwx. 1 mysql mysql  12582912 4月   1 18:59 ibdata1
-rwxrwxrwx. 1 mysql mysql  50331648 4月   1 18:59 ib_logfile0
-rwxrwxrwx. 1 mysql mysql  50331648 4月   1 18:59 ib_logfile1
-rw-r-----  1 root  root   12582912 4月   1 18:14 ibtmp1
drwxrwxrwx. 2 mysql mysql      4096 7月   6 2020 mysql
-rwxrwxrwx. 1 mysql mysql  30408704 4月   1 18:50 mysql.ibd
drwxrwxrwx. 2 mysql mysql      4096 7月   6 2020 performance_schema
-rwxrwxrwx. 1 mysql mysql      1676 7月   6 2020 private_key.pem
-rwxrwxrwx. 1 mysql mysql       452 7月   6 2020 public_key.pem
-rwxrwxrwx. 1 mysql mysql      1112 7月   6 2020 server-cert.pem
-rwxrwxrwx. 1 mysql mysql      1676 7月   6 2020 server-key.pem
-rwxrwxrwx. 1 mysql mysql 283240902 4月   1 18:29 slow.log
drwxrwxrwx. 2 mysql mysql      4096 1月  28 16:11 small_reservoir
drwxrwxrwx. 2 mysql mysql      4096 7月   6 2020 sys
drwxrwxrwx. 2 mysql mysql      4096 9月  18 2020 ulanqab
-rwxrwxrwx. 1 mysql mysql  46137344 4月   1 18:59 undo_001
-rwxrwxrwx. 1 mysql mysql  46137344 4月   1 18:59 undo_002

很幸运,日志文件也在这,打开日志文件error.log

[root@localhost mysqldata]# cat error.log
...
2021-04-02T09:55:16.214463+08:00 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.12) starting as process 31378
mysqld: File './bin.index' not found (OS errno 13 - Permission denied)
2021-04-02T09:55:16.217040+08:00 0 [ERROR] [MY-010119] [Server] Aborting
2021-04-02T09:55:16.217143+08:00 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.12)  MySQL Community Server - GPL.
2021-04-02T09:57:03.662034+08:00 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.12) starting as process 870
mysqld: File './bin.index' not found (OS errno 13 - Permission denied)
2021-04-02T09:57:03.664942+08:00 0 [ERROR] [MY-010119] [Server] Aborting
2021-04-02T09:57:03.665101+08:00 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.12)  MySQL Community Server - GPL.
2021-04-02T10:01:18.282773+08:00 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.12) starting as process 5176
mysqld: File './bin.index' not found (OS errno 13 - Permission denied)
2021-04-02T10:01:18.285592+08:00 0 [ERROR] [MY-010119] [Server] Aborting
2021-04-02T10:01:18.285696+08:00 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.12)  MySQL Community Server - GPL.

可以看到,最后的日志信息mysqld: File './bin.index' not found (OS errno 13 - Permission denied)

没找到./bin.index,因为没有权限。

这个bin.index存放的是bin.log的文件名列表

[root@localhost mysqldata]# cat bin.index
./bin.000014
./bin.000015
./bin.000016
./bin.000017
./bin.000018
./bin.000019

bin.log是mysql的备份文件,用来恢复数据的。

刚看到这个信息时,觉得有点奇怪,bin.index文件在哪,为啥没权限,我是root用户啊,怎么会没有权限呢。

然后想起来刚刚的数据存储目录下好像有一堆bin文件,就查看一下

[root@localhost mysqldata]# ll
总用量 1187696
-rw-r-----  1 mysql mysql        56 9月  28 2020 auto.cnf
-rw-r-----  1 mysql mysql 564958808 3月  16 10:03 bin.000014
-rw-r-----  1 root  root    3858980 3月  17 02:05 bin.000015
-rw-r-----  1 root  root   99555083 3月  30 15:18 bin.000016
-rw-r-----  1 root  root        196 3月  30 15:19 bin.000017
-rw-r-----  1 root  root        196 3月  30 15:19 bin.000018
-rw-r-----  1 root  root   15713352 4月   1 18:59 bin.000019
-rw-r-----  1 root  root         78 3月  30 15:19 bin.index
-rwxrwxrwx. 1 mysql mysql      1680 7月   6 2020 ca-key.pem
...

可以看到是有bin.index,那就是权限问题,但是为啥我是root用户,访问权限也是640,为啥说我没权限呢?难道我不是root用户?(开始了自我怀疑,因为ssh工具是保存用户密码的,太长时间了,说不定我真记错了呢)

[root@localhost bin]# su root
[root@localhost etc]# sudo service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/opt/apps/tmp/mysql/mysqld.pid).

可以看到并没有啥用

那这个权限到底是啥意思呢?

实在没办法,只能找大佬了,百度一圈,从几个博客中理解了这个权限是啥意思了(代表性博客文章:mysqld: File ‘./mysql-bin.index’ not found (Errcode: 13 - Permission denied)MySQL启动失败 mysqld: File ‘./mysql-bin.index’ not found (Errcode: 13 - Permission denied)),这个权限指的是mysql启动命令所属为mysql用户组,而我们可以看一下数据存储目录下bin.index文件已经所有的bin.log文件所属用户组皆为root:root,所以这就导致了无权限问题,我无法启动mysql。

既然知道问题所在,那就简单了

将这些文件所属用户组全部改为mysql:mysql即可

[root@localhost mysqldata]# chown mysql:mysql -R /opt/apps/data/mysqldata

即:将mysql:mysql用户组权限赋予数据存储目录下所有文件

[root@localhost mysqldata]# ll
总用量 1187700
-rw-r-----  1 mysql mysql        56 9月  28 2020 auto.cnf
-rw-r-----  1 mysql mysql 564958808 3月  16 10:03 bin.000014
-rw-r-----  1 mysql mysql   3858980 3月  17 02:05 bin.000015
-rw-r-----  1 mysql mysql  99555083 3月  30 15:18 bin.000016
-rw-r-----  1 mysql mysql       196 3月  30 15:19 bin.000017
-rw-r-----  1 mysql mysql       196 3月  30 15:19 bin.000018
-rw-r-----  1 mysql mysql  15713352 4月   1 18:59 bin.000019
-rw-r-----  1 mysql mysql        78 3月  30 15:19 bin.index
-rwxrwxrwx. 1 mysql mysql      1680 7月   6 2020 ca-key.pem
-rwxrwxrwx. 1 mysql mysql      1112 7月   6 2020 ca.pem
-rwxrwxrwx. 1 mysql mysql      1112 7月   6 2020 client-cert.pem
-rwxrwxrwx. 1 mysql mysql      1680 7月   6 2020 client-key.pem
drwxrwxrwx. 2 mysql mysql      4096 7月   6 2020 cluster_manager
drwxrwxrwx. 2 mysql mysql     20480 4月   1 14:21 datengxia
-rwxrwxrwx. 1 mysql mysql    155208 4月   2 10:29 error.log
-rw-r-----  1 mysql mysql     61065 11月  2 14:59 ib_buffer_pool
-rwxrwxrwx. 1 mysql mysql  12582912 4月   1 18:59 ibdata1
-rwxrwxrwx. 1 mysql mysql  50331648 4月   1 18:59 ib_logfile0
-rwxrwxrwx. 1 mysql mysql  50331648 4月   1 18:59 ib_logfile1
-rw-r-----  1 mysql mysql  12582912 4月   1 18:14 ibtmp1
drwxrwxrwx. 2 mysql mysql      4096 7月   6 2020 mysql
-rwxrwxrwx. 1 mysql mysql  30408704 4月   1 18:50 mysql.ibd
drwxrwxrwx. 2 mysql mysql      4096 7月   6 2020 performance_schema
-rwxrwxrwx. 1 mysql mysql      1676 7月   6 2020 private_key.pem
-rwxrwxrwx. 1 mysql mysql       452 7月   6 2020 public_key.pem
-rwxrwxrwx. 1 mysql mysql      1112 7月   6 2020 server-cert.pem
-rwxrwxrwx. 1 mysql mysql      1676 7月   6 2020 server-key.pem
-rwxrwxrwx. 1 mysql mysql 283240902 4月   1 18:29 slow.log
drwxrwxrwx. 2 mysql mysql      4096 1月  28 16:11 small_reservoir
drwxrwxrwx. 2 mysql mysql      4096 7月   6 2020 sys
drwxrwxrwx. 2 mysql mysql      4096 9月  18 2020 ulanqab
-rwxrwxrwx. 1 mysql mysql  46137344 4月   1 18:59 undo_001
-rwxrwxrwx. 1 mysql mysql  46137344 4月   1 18:59 undo_002

此时所有数据文件全部属于mysql:mysql用户组了,启动MySQL

[root@localhost mysqldata]# service mysql start
Starting MySQL......... SUCCESS!
[root@localhost bin]# ps -ef | grep mysql
root      1271     1  0 10:33 pts/3    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/opt/apps/data/mysqldata --pid-file=/opt/apps/tmp/mysql/mysqld.pid
mysql     1751  1271  1 10:33 pts/3    00:00:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/opt/apps/data/mysqldata --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=error.log --pid-file=/opt/apps/tmp/mysql/mysqld.pid --socket=/opt/apps/tmp/mysql/mysql.sock --port=3326
root      4125 10500  0 10:36 pts/0    00:00:00 grep --color=auto mysql

启动命令都如此不同,嘎嘎嘎嘎嘎,OK,搞定!

posted @ 2021-04-02 11:42  IT-小浣熊  阅读(3714)  评论(1)    收藏  举报