1 故障现象:
在创建用户时候,提示以下错误:root@localhost Tue Oct 24 09:57:41 2017 09:57:41 [mysql]> create user 'liufofu'@'5.5.5.5' identified by 'liufofu';ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 43. The table is probably corrupted2 原因分析2.1 根据提示以为是数据表出问题了,赶紧查查看,但是数据表可以正常查询
root@localhost Tue Oct 24 09:54:15 2017 09:54:15 [(none)]> select count(*) from mysql.user where user='liufofu' and host='5.5.5.5';
+----------+| count(*) |+----------+| 0 |+----------+1 row in set (0.01 sec)2.2 对数据表进行一次check table操作root@localhost Tue Oct 24 09:57:50 2017 09:57:50 [mysql]> check table user;
+------------+-------+----------+----------+| Table | Op | Msg_type | Msg_text |+------------+-------+----------+----------+| mysql.user | check | status | OK |+------------+-------+----------+----------+1 row in set (0.00 sec)2.3 进行了以上操作后,发现还是不行。
跟使用人员进行沟通后,得出结果是:用户在创建时选择的是MySQL5.7的版本,而导入的备份文件为MySQL5.6的,版本不一致导致MySQL系统表有差异所之后。3 解决方案
知道问题后,处理方案就很容易了,升级系统表即可。[ 09:59:27-root@liufofu:3311 ]#/usr/local/mysql-5.7.18/bin/mysql_upgrade -S /data/mysql/3311/mysql.sock
Checking if update is needed.Checking server version.Running queries to upgrade MySQL server.Checking system database.mysql.columns_priv OKmysql.db OKmysql.engine_cost OKmysql.event OKmysql.func OKmysql.general_log OKmysql.gtid_executed OKmysql.help_category OKmysql.help_keyword OKmysql.help_relation OKmysql.help_topic OKmysql.innodb_index_stats OKmysql.innodb_table_stats OKmysql.ndb_binlog_index OKmysql.plugin OKmysql.proc OKmysql.procs_priv OKmysql.proxies_priv OKmysql.server_cost OKmysql.servers OKmysql.slave_master_info OKmysql.slave_relay_log_info OKmysql.slave_worker_info OKmysql.slow_log OKmysql.tables_priv OKmysql.time_zone OKmysql.time_zone_leap_second OKmysql.time_zone_name OKmysql.time_zone_transition OKmysql.time_zone_transition_type OKmysql.user OKThe sys schema is already up to date (version 1.5.1).Found 0 sys functions, but expected 22. Re-installing the sys schema.Upgrading the sys schema.Checking databases.sys.sys_config OKUpgrade process completed successfully.Checking if update is needed.到此用户的问题得到了解决。
4 参考资料:
4.1 mysql_upgrade官方文档
https://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html4.2 create user官方文档MySQL5.7之前基本都是通过grant来创建用户,而从5.7开始建议使用create user来创建用户。https://dev.mysql.com/doc/refman/5.7/en/create-user.html