Fork me on GitHub
Suzf  Blog

Mysql_Faq: ERROR 1396 (HY000): Operation CREATE USER failed for 'username'@'hostname'

在对mysql 权限进行管理的时候出现如下错误:
ERROR 1396 (HY000): Operation CREATE USER failed for 'username'@'hostname'

But 这个用户只真是存在的 。回想一个之前的操作 : 先是用 grant 语句创建了一个用户,然后权限有变 用 update 更新了一下 mysql.user 的数据 。结果就出现了上面的错误 。
解决办法 :删除无效/冲突的用户授权 ,重新根据需求授权。
这就是说 MySQL 权限控制最好是使用统一的操作方式。

FLUSH PRIVILEGES不会删除用户 ,而是从mysql数据库中的授权表重新载入权限。

GRANT, CREATE USER, CREATE SERVER, and INSTALL PLUGIN 语句 是缓存到服务器内存当中的 。该内存不会被释放由相应的REVOKE, DROP USER, DROP SERVER, and UNINSTALL PLUGIN 语句,因此对于执行该语句的过多的情况下,会有增加内存使用。该缓存内存可以被释放使用 FLUSH PRIVILEGES。

DROP USER
DROP USER user[,user] ...
http://dev.mysql.com/doc/refman/5.1/en/drop-user.html
DROP USER 'username'@HOSTNAME;
CREATE USER 'username'@HOSTNAME [IDENTIFIED BY 'password'];
你可能会需要的,如果你使用的删除刷新权限。
请记住:这并不一定撤销所有该用户可能有(如表的权限)的权限,你将不得不这样做
如果你不这样做,你可能无法重新创建用户。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'username'@HOSTNAME;
DELETE FROM mysql.user WHERE user='username';
FLUSH PRIVILEGES;
CREATE USER 'username'@HOSTNAME [IDENTIFIED BY 'password'];

用户的帐户名是等价的:
以“user_name'@'%'。例如,'user_name' 等同于 'user_name'@'%'。

补充阅读:http://dev.mysql.com/doc/refman/5.1/en/account-names.html
请阅读进一步 bug:
http://bugs.mysql.com/bug.php?id=28331
http://bugs.mysql.com/bug.php?id=62255