CentOS 下 MySQL 登录 1045 问题解决
由于需要在 CentOS 下部署整个应用, 自然少不了对数据库的操作. 但很多人可能会遇到一些问题, 比如创建用户成功, 但是却无法登录.
无法登陆一般就两个原因. 第一, 远程访问端口没开, 第二个原因就是密码错误了(很奇怪, 我们登录时的密码明明是正确的, 但还是会提示密码错误, 我也不知道这是什么原因, 有可能是编码之类的吧)
远程访问端口没开这种情况比较好解决, 如果用的云服务器, 在控制台去配置安全组, 打开相应端口就可以了.
这里说一下第二种错误, 这个比较坑. 第二种情况往往会报错显示: 1045 Access denied for user 'root'@'%' (using password:YES).
我把完整流程大致写一遍. 我的操作系统是 centos7.4,MySQL 版本是 5.7.
首先登陆 MySQL, 我的是 root 用户. 登录命令是
MySQL -u root -p
输入登录密码后, 窗口变化如下图:
首先看一下现在系统里面有哪些用户, 以及用户的具体权限, 具体命令:
查看用户:
SELECT DISTINCT CONCAT('User:''',user,'''@''',host,''';') AS query FROM MySQL.user;
查看具体用户的权限:
show grants for 'root'@'%';
窗口变化如下图:
接下来我要创建一位用户, 让改用户能够远程访问数据库, 并对其进行操作. 具体命令如下:create user zhangsanidentifiedby'zhangsan.CQU.2020.lisi';
grant all privileges on*.*to zhangsan@'%'identifiedby'zhangsan.CQU.2020.lisi';
或者一条命令直接搞定:
grant all privileges on *.* to 'zhangsan'@'%' identified by 'zhangsan.CQU.2020.lisi' with grant option;
操作完成后, 千万记得刷新, 否则可能不生效, 命令如下:
flush privileges;
此时再查看用户, 就能发现多了一位用户, 也就是我们刚才创建的用户.
输入 exit, 退出 MySQL, 然后试着用 zhangsan 这个账户登录一下.
问题顺利出现了, 就是登不上去, 接下来去解决这个问题咯.
首先, 找到自己的 MySQL 的 my.cnf 文件,(我的在 etc 文件夹下面, 不同的人可能不一样, 用 Linux 命令按条件查找即可)
打开文件后 (vi my.cnf), 进入编辑模式(a) 找到 mysqld 关键字, 在 mysqld 下面添加 skip-grant-tables, 保存退出(先 esc, 再: wq), 如图:
将注释去掉即可.
然后重启 MySQL, 命令如下:
service mysqld restart
接下来就是重新登录, 然后修改密码啦.
提示输入密码那里, 直接 enter, 跳过密码验证, 登陆成功. 接下来进入 MySQL 数据库, 然后修改密码, 命令如下.
use MySQL
修改密码:
update user set authentication_string=password("zhangsan.CQU.2020.lisi") where user="zhangsan";
如图:
然后退出 MySQL, 将刚刚修改过的 my.cnf 文件改回来, 并重新启动 MySQL.
可以看到登录已经成功了, 远程连接也能成功, 就不演示了, 如果远程登录还不成功, 检查一下端口设置, 是否开启了远程访问.
来源: https://www.cnblogs.com/doufuyu/p/12155112.html