内容描述: 在已经设置了主机名的主机上安装mysql5.5,成功之后,进入mysql,查看user,会有下面的表数据

mysql> select user, host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1       |
|      | MAC       |
| root | MAC       |
|      | localhost |
| root | localhost |
+------+-----------+

这时需要drop除root@localhost 和 root@127.0.0.1之外的用户,但是会有下面的错误

mysql> drop user ''@'MAC';
Query OK, 0 rows affected (0.00 sec)
mysql> drop user 'root'@'MAC';
Query OK, 0 rows affected (0.00 sec)
:第二次执行出现这样的错误(注意大小写)
mysql> DROP USER  root@'MAC';
ERROR 1396 (HY000): Operation DROP USER failed for 'root'@'mac'
查看得:
mysql> select user, host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1       |
|      | MAC       |
| root | MAC       |
|      | localhost |
| root | localhost |
+------+-----------+
6 rows in set (0.00 sec)

可以看到并没有删除这两个用户,这时可以使用delete删除数据表中的记录。

问题的分析解决:

     这个问题主要是出现在你的主机名中包含大写字母的时候,当你在安装mysql之前,主机名已经设置为包含大写的格式,安装完之后就会出现,(’’@主机名和root@主机名)这两个用户。

     这样的问题在mysql5.0的时候并没有出现,mysql5.0中主机名可以保存为大写形式,但是在mysql5.5中却不能保存为大写的形式,即使你在grant中写的是大写,mysql5.5也会存储为小写的。实验如下:

1)、查看数据库中的用户

mysql drop用户没有真正的删除记录的问题_user

2)、新建用户

mysql drop用户没有真正的删除记录的问题_mysql_02

     可以看到,并没有存储WEBGAME_SR_216,而是存储为webgame_sr_216

注:这个问题出现在如下组合中,还有其他的组合,还须发现

Reproduced on Linux RHEL 5.5 64bit + MySQL 5.5.9

Reproduced on Linux RHEL 5.4 64bit + MySQL 5.1.53

Reproduced on Linux Fedora 12 32bit + MySQL 5.5.15 (see the trace here, with hostname=FEDORA02):

这个问题是mysql的一个bug,需要了解更多,可以看下面的网站。

http://bugs.mysql.com/bug.php?id=62255(包含其他的几个bug,以及相应的补丁)