DROP USER和从mysql.user表中删除行的区别

9
我有一个数据库,每时每刻都有数百个活动连接。当我使用DROP USER SQL语句删除用户帐户时,需要大约4秒的时间,此期间所有其他连接的状态均为“正在检查权限”。这意味着要删除1000个用户,我将有效地锁定数据库长达4000秒的时间,这是不可接受的。然而,我注意到从mysql.users表中删除用户行是瞬间完成的。
从mysql.users表中删除行是否合规?与使用DROP USER相比有什么缺点?我是否在其他地方留下了陈旧的行?是否存在传播问题?我最有可能要走这条路,但我想知道需要进行哪些其他清理工作。

如果您在单个事务中执行1000个DROP USER语句,速度是否比4000秒更快?(我知道这是一个荒谬的数字,只是用于说明,但我想知道时间罚款是否可以仅针对多个删除操作进行一次...) - sarnold
1
很好的问题。事实上,我确实进行了测试。不幸的是,随着被删除用户数量的增加,所需时间成比例增长。编辑:如果在单个DROP USER命令中指定多个用户,情况也是如此。 - BrainCore
1个回答

3

根据您使用的MySQL版本而定。

MySQL <= v5.0中删除用户仅会移除用户记录而不是权限。 MySQL >= v5.0.2则可以同时完成两者。

同时,可传递多个用户。


DROP USER只从mysql.user和mysql.tables_priv中删除行,不做其他操作,这种说法准确吗? - BrainCore
1
从我的经验来看,Drop user 取代了 Revoke privileges、从 user 表中删除记录和 flush privileges 的需求。 - codemonkee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接