如果在Linux终端中登录MySQL时遇到下面类型的错误:

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

 

此错误可以直观的看出是登录被拒绝,原因通常为密码错误。

如果你是刚通过yumapt-get安装完MySQL,这时你是不知道root的登录密码的,尝试登录肯定登录失败。

这时你可以在MySQL的运行日志文件中尝试找到root的初始密码,MySQL日志路径为:/var/log/mysql/mysql.log

 

但如果你并没有在日志文件中发现密码的存在,此时就要通过另一种方法,跳过MySQL登录的授权表,也就是说谁都能进入mysql看到所有数据表,输入任意字符账号密码都可以登录。

 

现在开始操作:

进入到这个配置文件
# sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
或
# sudo vim /etc/my.cnf
如果这两个文件都不在或无效可以通过全局搜索找一下MySQL配置文件的位置(以.cnf结尾):
# sudo find / -name "my*.cnf"

进到配置文件然后在这个配置文件中的 [mysqld] 下面一行中加入skip-grant-tables这句话

 

重新启动MySQL (Ubuntu)
# service mysql restart

重新启动MySQL (CentOS 7.0)
# systemctl restart mysql

 

登录MySQL
# mysql -uroot -p

 

进入库中并更新密码的字段值

>update mysql.user set authentication_string=Password("123.com") where User="root";
>flush privileges; 

 

重新进入到mysqld.cnf文件中去把刚开始加的skip-grant-tables这条语句给注释掉
再返回终端输入:
# mysql -uroot -p123.com;
应该就可以进入数据库了。
(如果想让root用户可以在任何地方登录可以在MySQL中执行下面SQL语句:)
>update mysql.user set Host="%" where User="root";
>select Host,User,authentication_string from mysql.user;
+--------+--------------+----------------------------------------+
| Host      | User             | authentication_string                         |
+--------+--------------+----------------------------------------+
|   %        | root              | *THISISNOTAVALIDPASSWORDTHA  |
+--------+--------------+----------------------------------------+

2 rows in set (0.00 sec)

 

 

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

如果此时还是不能进入到数据库,那么就需要返回第一步中,取消刚才注释掉的那条语句使它重新生效,再重新进入mysql中

执行:
>select User,plugin from mysql.user;
+------------------+------------+
| User             | plugin                
+------------------+------------+
| root             | auth_socket       
+------------------+------------+
1 rows in set (0.01 sec)

可以看到错误原因是因为plugin root的字段的值是auth_socket,那我们改掉它,替换为mysql_native_password就行了。

>update user set plugin='mysql_native_password' where user='root';

再输入:
>select User,plugin from mysql.user;
+------+-----------------------+
| User | plugin                |
+------+-----------------------+
| root | mysql_native_password |
+------+-----------------------+
1 row in set (0.01 sec)

我们能看到root用户的字段改成功了。此时退出MySQL,将第一步文件中的skip-grant-tables再次注释掉并重启MySQL就可以正常登录了。