参考自: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
mysql_install_db –usrer=mysql datadir=/var/lib/mysql
datadir是我的mysql存放文件目录
MySQL Daemon failed to start.
正在启动 mysqld: [失败]
mysql_install_db
[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服务启动失败的问题,结果又出现了一系列的问题,本想重新安装,又想解决问题,最后终于可以正常使用了,今天真是一波三折,一重接一重,写下这篇博客,希望对和我出现相同问题的童鞋有所帮助!