mysql报错Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

参考自:https://blog.csdn.net/indexman/article/details/16980433

今天在启动mysql时,没有启动成功,查看日志报错如下:

1、查看报错信息如下:

[root@localhost local]# cd  /var/log/mysqld.log | grep 'ERROR'

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist


2、经过查阅资料得知。要敲如下命令解决:
mysql_install_db –usrer=mysql datadir=/var/lib/mysql

datadir是我的mysql存放文件目录


3、然后重启mysql还是不行:
MySQL Daemon failed to start.

正在启动 mysqld:                                          [失败]


4、然后试了下单独的命令,启动完成

mysql_install_db


5、启动mysql服务
[root@mysql mysqld]# /etc/init.d/mysqld restart
停止 mysqld:                                              [确定]
正在启动 mysqld:                                          [确定]


-------------------------------------------------------------------------------------------------------------------

解决上述问题后,随后,我又启动MySQL:

又出现了如下问题:

[root@localhost admin]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

解决办法:

先停止服务,在敲如下命令:

/usr/bin/mysqld_safe --skip-grant-tables。

具体过程如下:

1. 停止服务

[root@localhost admin]# service mysqld stop

Stopping mysqld:                                           [  OK  ]


2.按照网上的办法,敲如下命令:

[root@localhost admin]#  /usr/bin/mysqld_safe --skip-grant-tables
180406 20:16:53 mysqld_safe Logging to '/var/log/mysqld.log'.
180406 20:16:54 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
^C

^C
^Z

[1]+  Stopped                 /usr/bin/mysqld_safe --skip-grant-tables


3. 当启动MySQL时,出现了相同的问题。

[root@localhost admin]# mysql -u root -p
Enter password:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)


4. 于是,我使用不使用密码的方式登录,结果登录成功了。

[root@localhost admin]# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


5. 说明可以正常登录,但密码有问题,我们修改一下密码。

mysql> set password for root@localhost=password('123');

Query OK, 0 rows affected (0.00 sec)


6. 再次使用密码登录,登录成功!

[root@localhost admin]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
---------------------------------------------------------------------------------------------------------------------

当我查询数据库(class_236)下的表(EMP)时,又出现了如下错误:

mysql> select * from EMP;
ERROR 1017 (HY000): Can't find file: './class_236/EMP.frm' (errno: 13)

在网上查询许久后,发现是文件权限的问题。

1. 在root根目录下:

[root@localhost /]# cd /var/lib/mysql

[root@localhost mysql]# ll -a
total 20508
drwxr-xr-x.  7 mysql mysql     4096 Apr  6 21:31 .
drwxr-xr-x. 36 root  root      4096 Mar 12 02:07 ..
drwx------.  2 mysql mysql     4096 Apr  7 07:41 class_236
-rw-rw----.  1   755 mysql 10485760 Apr  6 21:33 ibdata1
-rw-rw----.  1   755 mysql  5242880 Apr  6 21:33 ib_logfile0
-rw-rw----.  1   755 mysql  5242880 Apr  6 19:10 ib_logfile1
drwx------.  2 mysql mysql     4096 Apr  6 20:35 mysql

srwxrwxrwx.  1 mysql mysql        0 Apr  6 21:31 mysql.sock


2. 进入存在.frm的目录,下面两种办法都可以进入:

(1)查看.frm文件的路径:

[root@localhost mysql]# find -iname '*host.frm*'

./mysql/host.frm

[root@localhost mysql]# cd ./mysql

(2)或者直接进入 mysql目录,上面黄底紫字标的。

[root@localhost mysql]# cd mysql


3 . 修改文件权限:

发现没有-x,可执行权限:

[root@localhost mysql]# ll
total 1048
-rw-rw----. 1 mysql mysql   8820 Apr  6 20:11 columns_priv.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 columns_priv.MYD
-rw-rw----. 1 mysql mysql   4096 Apr  6 20:11 columns_priv.MYI
-rw-rw----. 1 mysql mysql   9582 Apr  6 20:11 db.frm
-rw-rw----. 1 mysql mysql    880 Apr  6 20:11 db.MYD
-rw-rw----. 1 mysql mysql   5120 Apr  6 20:11 db.MYI
-rw-rw----. 1   755 mysql     65 Mar 30 18:29 db.opt
-rw-rw----. 1 mysql mysql   8624 Apr  6 20:35 DEPT.frm
-rw-rw----. 1 mysql mysql    112 Apr  6 20:35 DEPT.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:35 DEPT.MYI
-rw-rw----. 1 mysql mysql   8780 Apr  6 20:35 EMP.frm
-rw-rw----. 1 mysql mysql    676 Apr  6 20:35 EMP.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:35 EMP.MYI
-rw-rw----. 1 mysql mysql  10223 Apr  6 20:11 event.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 event.MYD
-rw-rw----. 1 mysql mysql   2048 Apr  6 20:11 event.MYI
-rw-rw----. 1 mysql mysql   8665 Apr  6 20:11 func.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 func.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:11 func.MYI
-rw-rw----. 1 mysql mysql     35 Apr  6 20:11 general_log.CSM
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 general_log.CSV
-rw-rw----. 1 mysql mysql   8776 Apr  6 20:11 general_log.frm
-rw-rw----. 1 mysql mysql   8700 Apr  6 20:11 help_category.frm
-rw-rw----. 1 mysql mysql   1120 Apr  6 20:11 help_category.MYD
-rw-rw----. 1 mysql mysql   3072 Apr  6 20:11 help_category.MYI
-rw-rw----. 1 mysql mysql   8612 Apr  6 20:11 help_keyword.frm
-rw-rw----. 1 mysql mysql  89241 Apr  6 20:11 help_keyword.MYD
-rw-rw----. 1 mysql mysql  16384 Apr  6 20:11 help_keyword.MYI
-rw-rw----. 1 mysql mysql   8630 Apr  6 20:11 help_relation.frm
-rw-rw----. 1 mysql mysql   9081 Apr  6 20:11 help_relation.MYD
-rw-rw----. 1 mysql mysql  17408 Apr  6 20:11 help_relation.MYI
-rw-rw----. 1 mysql mysql   8770 Apr  6 20:11 help_topic.frm
-rw-rw----. 1 mysql mysql 464340 Apr  6 20:11 help_topic.MYD
-rw-rw----. 1 mysql mysql  20480 Apr  6 20:11 help_topic.MYI
-rw-rw----. 1 mysql mysql   9510 Apr  6 20:11 host.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 host.MYD
-rw-rw----. 1 mysql mysql   2048 Apr  6 20:11 host.MYI
-rw-rw----. 1 mysql mysql   8778 Apr  6 20:11 ndb_binlog_index.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 ndb_binlog_index.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:11 ndb_binlog_index.MYI
-rw-rw----. 1 mysql mysql   8586 Apr  6 20:11 plugin.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 plugin.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:11 plugin.MYI
-rw-rw----. 1 mysql mysql   9996 Apr  6 20:11 proc.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 proc.MYD
-rw-rw----. 1 mysql mysql   2048 Apr  6 20:11 proc.MYI
-rw-rw----. 1 mysql mysql   8875 Apr  6 20:11 procs_priv.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 procs_priv.MYD
-rw-rw----. 1 mysql mysql   4096 Apr  6 20:11 procs_priv.MYI
-rw-rw----. 1 mysql mysql   8626 Apr  6 20:35 SALGRADE.frm
-rw-rw----. 1 mysql mysql     65 Apr  6 20:35 SALGRADE.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:35 SALGRADE.MYI
-rw-rw----. 1 mysql mysql   8838 Apr  6 20:11 servers.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 servers.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:11 servers.MYI
-rw-rw----. 1 mysql mysql     35 Apr  6 20:11 slow_log.CSM
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 slow_log.CSV
-rw-rw----. 1 mysql mysql   8976 Apr  6 20:11 slow_log.frm
-rw-rw----. 1 mysql mysql   8955 Apr  6 20:11 tables_priv.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 tables_priv.MYD
-rw-rw----. 1 mysql mysql   4096 Apr  6 20:11 tables_priv.MYI
-rw-rw----. 1 mysql mysql   8636 Apr  6 20:11 time_zone.frm
-rw-rw----. 1 mysql mysql   8624 Apr  6 20:11 time_zone_leap_second.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 time_zone_leap_second.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:11 time_zone_leap_second.MYI
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 time_zone.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:11 time_zone.MYI
-rw-rw----. 1 mysql mysql   8606 Apr  6 20:11 time_zone_name.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 time_zone_name.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:11 time_zone_name.MYI
-rw-rw----. 1 mysql mysql   8686 Apr  6 20:11 time_zone_transition.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 time_zone_transition.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:11 time_zone_transition.MYI
-rw-rw----. 1 mysql mysql   8748 Apr  6 20:11 time_zone_transition_type.frm
-rw-rw----. 1 mysql mysql      0 Apr  6 20:11 time_zone_transition_type.MYD
-rw-rw----. 1 mysql mysql   1024 Apr  6 20:11 time_zone_transition_type.MYI
-rw-rw----. 1 mysql mysql  10466 Apr  6 20:11 user.frm
-rw-rw----. 1 mysql mysql    276 Apr  6 20:11 user.MYD

-rw-rw----. 1 mysql mysql   2048 Apr  6 20:11 user.MYI

添加权限:

[root@localhost mysql]# chown mysql *
[root@localhost mysql]# chgrp mysql *
[root@localhost mysql]# chmod ug+rwx *
[root@localhost mysql]# chmod o+rw *

重启MySQL即可。

--------------------------------------------------------------------------------------------------------

当我使用表的时候,又出现了新的问题:

mysql> show tables;
ERROR 1018 (HY000): Can't read dir of './class_236/' (errno: 13)

解决办法:

在root根目录下:

[root@localhost /]# chown -R mysql:mysql /var/lib/mysql/class_236

其中 /var/lib/mysql 为mysql数据库存储目录 ,class_236为数据库。


在/var/lib/mysql中:

[root@localhost mysql]# chown -R mysql:mysql class_236

原因:

查看这个数据库的目录属性:

[root@localhost /]# cd /var/lib/mysql
[root@localhost mysql]# ll -t

发现这个数据库目录的属主不是mysql,使用chown修改,使表信息正常。 

此时还可以使用# ls -l 或 # ll  或 # ll -a,查看该目录的详细信息

再次重新启动MySQL。这时,就可以成功使用表了。

-------------------------------------------------------------------------------------------------------

今天早上开电脑,突然就打不开mysql了,在网上找了好多办法都不行。知道看到一篇博客,解决了MySQL服务启动失败的问题,结果又出现了一系列的问题,本想重新安装,又想解决问题,最后终于可以正常使用了,今天真是一波三折,一重接一重,写下这篇博客,希望对和我出现相同问题的童鞋有所帮助!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值