根据报错信息,确定报错在函数replace_db_table里面,调用栈如下

    报错条件是如下,操作是revoke,且mysql.db中找不到对应权限

    grant select on *.* to 'xx1'@'localhost'调用栈如下

    只修改了mysql.user表 而revoke select * test.* from 'xx1'@'localhost' 需要删除mysql.db表中相应记录,所以会报错

    修改mysql.user表 grant/revoke privilege on db.* 修改mysql.db表 修改mysql.table表 三种操作互不影响,赋予一个用户大粒度的权限,并不能收回小粒度的权限

    执行drop user操作后,会调用sql/sql_acl.cc:handle_grant_data修改上述三个表中,所有与被drop用户相关的记录