问题:
- Access denied for user 'root'@'localhost' (using password: YES)
- mysql修改密码,cmd命令行不生效
- cmd修改密码成功,登录不上
- ....
以上种种问题大致都可以概括成对mysql的用户表不了解
先来看看mysql中user表的结构
Host列表示主机的链接方式
- host方式登录mysql
- 127.0.0.1 表示通过ip来连接登录mysql
- ::1 表示通过cmd方式来登录mysql
- localhost 表示通过字符localhost来指定本地主机登录mysql
- % 表示远程连接的方式登录mysql
以上四种方式是mysql安装后自动创建了,用户名均为root,密码为空
我们可以通过cdm的命令行查看当前mysql的账户密码( 需要先使用命令mysql -uroot -p ,密码为空登录 )如下
如果通过远程来登录mysql的话,需要使用sql语句修改host
update user set host = '%' where user = 'root';
此语句运行会报错,不用理会,再运行下面这条语句即可(此条语句非常重要,不运行,sql脚本不会生效!!!)
FLUSH PRIVILEGES;
通过命令行修改mysql密码的话,如下:
mysqladmin -uroot -p旧密码 password 新密码
如:
mysqladmin -uroot -p123 password 456
修改成功后,使用navicat可以查看修改的状态,如下
1.因为mysql修改密码回后经过加密再存入数据。2.因为此处修改的仅仅是通过cmd登陆的密码,所有远程登陆,和用ip登陆,localhost登陆的密码均不会发生改变。
当我们想把所有的登陆方式都设成统一的密码,通过如下sql语句即可(不过好像数据库不会加密再存入)
use mysql;
update user set password="123456" where user='root';
理解比较粗浅,如有高见,望指教。