我错误地从我的mysql.user
表中删除了我的root用户。
delete from mysql.user where user='username';
要创建相同的root用户,我试图触发查询以下,
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
我收到错误
ERROR 1396 (HY000): Operation CREATE USER failed for 'username'@'localhost'
根据this SO answer,我尝试FLUSH PRIVILEGES;
,但我仍然遇到同样的错误。
知道出了什么问题吗?
我还必须从mysql.db
表
delete from mysql.db where user='username';
就是这样......
答案 0 :(得分:12)
如果使用DROP USER
命令删除用户,则用户将被完全删除。如果以后必须添加具有相同用户名的用户,则可以使用FLUSH PRIVILEGES命令从mysql内存中完全删除权限。
DROP USER username@hostname;
在创建同一用户之前,您必须restart mysql
或运行FLUSH PRIVILEGES
,因为权限存在问题。
在基于linux的系统中重启mysql
sudo service mysql restart
在Windows系统中重新启动
net stop mysql
net start mysql
在mysql提示符中刷新权限
FLUSH PRIVILEGES;
如果您知道用户拥有哪些权限
,您也可以使用REVOKE
命令
REVOKE privillege1, privillege2, ... FROM deleted_user@host
答案 1 :(得分:1)
必须在mysql
系统架构的其他表中引用此用户。我会以与删除它相同的方式重新创建用户:
INSERT INTO mysql.user (user, host, password)
VALUES ('root', 'localhost', PASSWORD('pasw'));
然后
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';
永远不要搞乱这个架构的另一个原因(抱歉,我无法帮助)。
答案 2 :(得分:0)
至于上述情况,我的案例中不存在password
字段,而mysql会抛出错误。
这个命令帮助:
INSERT INTO mysql.user (user, host, ssl_cipher, x509_issuer, x509_subject, plugin, authentication_string) VALUES ('user', 'localhost', '', '', '', 'mysql_native_password', PASSWORD('pass'));