问题:
把mysql中的用户全部删除后如何恢复?
解决方法一:
重新初始化数据库
说明:
如果自己的测试环境使用此方法还可以,但是如果删除的是生产环境中的数据库用户,此方法就无法使用了。
解决方法二:
#关掉数据库
/etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
#无视用户权限表启动mysql
mysqld_safe --skip-grant-tables --skip-networking &
[1] 8158
#然后登录到数据库
mysql
#这里因为跳过用户表所以可以不用指定用户和密码就能登录进来
#进入mysql库
mysql> use mysql;
#添加用户并赋予密码
insert into user (user,host,password,ssl_cipher,x509_issuer,x509_subject) values('root','localhost',PASSWORD('123'),'','','');
#mysql里自带的函数
#关闭、开启数据库
/etc/init.d/mysqld stop
/etc/init.d/mysqld start
Starting MySQL. SUCCESS!
#登录数据库
mysql -uroot -p123
#给用户授权:看下面的问题二
insert into mysql.user values ('localhost','root',PASSWORD('123'),
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'','','','',0,0,0,0,'mysql_native_password','','N');
--skip-grant-tables #使用连接层验证模块
--skip-networking
拒绝外部网络随意连接,只能通过本地socket文件连接,安全!
mysql> select * from mysql.user\G
*************************** 1. row ***************************
Host: localhost
User: root
Password: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y #<<--发现这里所有的权限都是yes
Shutdown_priv: Y
Process_priv: Y
在找到刚刚创建的用户:
*************************** 4. row ***************************
Host: 10.0.0.51
User: root
Password: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N #<<--发现这里所有的权限都no
#所以在添加用户密码后必须更改权限
#关闭数据库
/etc/init.d/mysqld stop
#启动数据库
mysqld_safe --skip-grant-tables --skip-networking &
#进入mysql库
use mysql;
#修改root用户密码
mysql> update user set password=PASSWORD('123') where user='root' and host='localhost';