今天要安装一个软件,需要用到Mysql数据库,要在里面建一个数据库,及相应的用户,我按其脚本执行建库脚本,很顺利,数据库成功建好,但在执行用户授权时却犯了一个低级错误: create database cactidb ;7 z7 G+ R! ^- ?( w4 H
grant all on cactidb.* to root@localhost;
2 s I( `; K% c% ] grant all on cactidb.* to cactiuser;
( B. t- T1 K* I2 Z 本来这是没什么的,但我之前已经把root@localhost这个用户给删除了,我只留下了用户名为root,host是%的用户,而我平常的操作为了方便都只是用root在本机登录的,我的mysql也只监听127.0.0.1这个地址,结果一执行grant all on cactidb.* to root@localhost;这个命令立即完蛋了,我在本机用root登录就只能是root@localhost这个用户的权限,而不是一平常用的root@%这个用户,但root@localhost基本就是没有权限,按照Mysql的授权机制,我只有在其它主机登录才可使用root@%这个用户,而我根本就不可能从其它地址登录,这下把我给急坏了。由于严格的防火墙策略,我是不可能开放mysql的端口的。后来在网上找了相关资料,用以下方法解决了这个问题:, }& k% s3 M0 @1 G+ r
1、 关闭mysql服务:service mysqld stop
" Q1 j7 Q. w: `9 G7 H: L0 N 2、 ./mysqld_safe --skip-grant-tables 重新启动mysql
3 e3 [# A% F: m8 E9 w F+ ] 3、 重新使用root登录,此时不需要密码( v \# U4 N7 i) V) r2 A
4、 登录后删除root@local这个用户$ O5 s0 V% U: ?/ N
5、 用ps查到mysqld进程,并用kill中止mysql进程" C g- l1 W: @9 h q1 K
6、 重新启动mysql进程: service mysqld start& P8 x5 E5 I: J! \
7、 当然使用这个方法也可重置root密码: set password for root =password(yourpass');& M& `3 s, e; @+ o6 j
8、或者也可以重置root用户权限4 F, q! _2 g& q$ F& a5 S2 ?; B) h
update db set Select_priv='Y' where user='root';
" M9 X+ {( _$ a/ `1 u" O update db set Insert_priv='Y' where user='root';9 o. X9 ~2 r8 d6 k+ |3 U
update db set Update_priv='Y' where user='root';: }$ ?. v8 r v+ A8 O
update db set Delete_priv='Y' where user='root';& q |: S) m% s; q6 f
update db set Create_priv='Y' where user='root';
5 u s! V6 ^7 |! } update db set Drop_priv='Y' where user='root';( q- \$ V8 {. w9 @& [- D. w
update db set References_priv='Y' where user='root';/ [2 g! B3 c( [
update db set Grant_priv='Y' where user='root';& U, N. m* t; @( h6 G# f
update db set Index_priv='Y' where user='root';9 M2 J( g9 s( f/ K& b$ f; S" [
update db set Alter_priv='Y' where user='root';
7 q) r. A) \8 J! J8 O, U% C- C _! a update db set Create_tmp_table_priv='Y' where user='root';
1 F" k: q0 w* I/ X4 M update db set Lock_tables_priv='Y' where user='root';* J9 R0 [/ \8 K; L% c( @! C
update db set Create_view_priv='Y' where user='root';3 |" ^' n1 |( e6 S
update db set Grant_priv='Y' where user='root';
+ ^- n6 j' D7 a- i$ g2 V+ o update db set Show_view_priv='Y' where user='root';
; v3 `4 k: G' V5 w1 G: R update db set Create_routine_priv='Y' where user='root';0 t5 v: I0 z7 N% C: w& M
update db set Alter_routine_priv='Y' where user='root';
/ ~5 e) V) b2 l( g update db set Execute_priv='Y' where user='root';+ s, _7 d6 @4 |4 P3 p- G! c2 K8 w5 Q
再把mysql.user表里root用户的所有字段都置为'Y'; A, m9 a. j$ }( o K+ A- R
注意使用--skip-grant-tables 启动mysql时不可使用grant命令的,所以只有我们手工来理发权限表 |