MySQL5.7中mysql.user表变化

来源:互联网 发布:手机淘宝忘记密码 编辑:程序博客网 时间:2024/05/24 15:41

问题描述
逻辑全备MySQL5.6.24后,导入到MySQL5.7.18. 经测试发现部分应用账号授权有问题,无法正常访问数据库。

错误信息
query failed: [1142] SELECT command denied to user ‘monitor’@’10...100’ for table ‘history_uint’ [select clock,ns,value from history_uint where itemid=103172 and clock<=1501496763 and clock>1501493163 order by clock desc limit 1]

排查过程
1.但这些用户权限在MySQL5.6中是正常的。由于是在同一台主机上进行的升级,排除了网络问题。
2.尝试给用户授权,出现如下错误
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON zabbix_pro.* TO ‘zabbix_pro’@’%’ ;
ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 43. The table is probably corrupted

解决方法
1.删掉从5.6中恢复过来的mysql.user表。
2.获取5.7中相同版本的表结构,重建mysql.user表。
3.用 pt-show-grants 获取MYSQL5.6的用户权限
4.在5.7中应用这些授权

通过比较发现
1.MySQL5.7中mysql.user表比MySQL5.6少了1个字段(Password)
2.MySQL5.7中mysql.user表比MySQL5.6多了3个字段(password_last_changed,password_lifetime,account_locked)