场景一:mysql不慎将自己修改在登录权限之外
部署mysql到云服务器,对于远程连接的问题,看到有大佬说在mysql的名为’mysql’数据库中直接更改权限,即
use mysql;
update user set Host='%' where User='root';
其中,% 代表任意的客户端,可替换成具体IP地址。
这里我不小心将%换错了地址(即不是本地的,也不是云服务器的),这种情况下,是无法登录数据库的。
场景二:忘记密码
这种情况不用多说,肯定无法登录数据库。
以上两种场景都可以通过绕过mysql密码验证来解决。
绕过mysql密码验证
检查数据库是否是启动状态,如果是启动状态先停止服务:
service mysqld stop
找到my.conf即数据库配置文件:
vi /etc/my.cnf
在my.cnf文件内添加:
skip-grant-tables
如果原来由但是被注释掉了,去掉注释符号#即可。
启动mysql:
service mysqld start
登录mysql:
mysql -uroot -p
提示输入密码,不用管,这时候直接点回车。
修改root账户的密码:
update mysql.user set authentication_string=password('123456') where User="root" ;
flush privileges; #刷新系统授权表
这里注意此时密码可以是很简单的组合,但如果是没有配置文件的这句skip-grant-tables,再用上述语句修改密码必须遵守mysql的安全规则,即
必须包含大小写字母、特殊符号、数字,并且长度大于8位
这样最开始说的那两种情况即可得到解决。
ps:这样操作了以后若客户端可能会出现无法连接的情况,请进行授权:
grant all privileges on *.* to root@'%'; #授权root账户远程访问权限
flush privileges; #刷新系统授权表