ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)最终解决方案
在上一篇博文中,写了关于怎么解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES问题的暂时解决方法,当时是弄了很久没有弄出来,所以没有先暂时跳过密码验证完成了了数据库的查询,今天来说说自己是怎么具体解决这个问题的。
首先出现这个问题是密码出了问题,我们需要跳过密码验证进入mysql进行修改密码
1.跳过密码验证进入mysql
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到[mysqld]这一块代码,在后面加上skip-grant-tables,如下
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
character_set_server=utf8
skip-external-locking
skip-grant-tables
保存后重启mysql
service mysql restart
接着输入
mysql -u root -p
输入你安装mysql时的密码
输入"show databases;"查看数据库
在mysql数据库有一个user表,存储的是数据库用户的信息,我们需要修改的里面用户的密码;
输入use mysql;是要使用mysql数据库的意思
接着输入show tables;查看mysql数据库下面有哪些表
可以看到里面有user这个表,现在可以查询一下里面有什么信息
发现里面有很多东西,可惜很乱,但是仔细看你可以看到鼠标选中的部分,看上图authentication_string就是密码列
在很多网上的博客中都写修改密码要用password=password("123456");我试了一下不对,会提示user表中没有这一列,可能是mysql之前的版本是password,现在改成了authentication_string.
现在输入update user set authentication_string=password("yourNewPassword") where User='root';(数据库更新语句哈)
然后输入mysql> exit;退出mysql界面
回到第一步,将密码输入跳过设置删除
找到[mysqld]这一块代码,删除第一步加入的skip-grant-tables,如下
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
character_set_server=utf8
skip-external-locking
保存后就可以输入service mysql restart,重启mysql.
接着输入mysql -u root -p,回车输入密码就不会在出错了