mysql drop用戶沒有真正的刪除記錄的問題

內容描述: 在已經設置了主機名的主機上安裝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 和 [email protected]之外的用戶,但是會有下面的錯誤

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)、查看數據庫中的用戶

134202509.png

2)、新建用戶

134249127.png

     可以看到,並沒有存儲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,以及相應的補丁)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章