Part1 事件经过
home-brew安装的mysql,新版MySQL,使用旧版数据库管理软件Sequel Pro,然后创建了一个新用户,准备开发用,密码是123456。。。
顺便导入了一波从别的机子上考过来的旧版本数据库文件,直接复制粘贴的,然后chmod。。
然后创建完使用php连接mysql时候报错,提示:
Plugin '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' is not loaded
我就琢磨卧槽升级完mysql怎么了,当时脑子思路有点乱这是啥意思。。
看看mysql.user表,密码是空的。。。。。。
看了看mysql的error.log有几个相关的
2016-06-04T12:18:24.916320Z 0 [ERROR] Column count of performance_schema.events_statements_current is wrong. Expected 41, found 40. Created with MySQL 50622, now running 50713. Please use mysql_upgrade to fix this error.
2016-06-04T12:18:24.916431Z 0 [ERROR] Column count of performance_schema.events_statements_history is wrong. Expected 41, found 40. Created with MySQL 50622, now running 50713. Please use mysql_upgrade to fix this error.
2016-06-04T12:18:24.917909Z 0 [ERROR] Native table 'performance_schema'.'memory_summary_global_by_event_name' has the wrong structure
2016-06-04T12:18:24.917936Z 0 [ERROR] Native table 'performance_schema'.'memory_summary_by_account_by_event_name' has the wrong structure
2016-06-04T12:18:24.917958Z 0 [ERROR] Native table 'performance_schema'.'memory_summary_by_host_by_event_name' has the wrong structure
......类似很多
顺便网上查了查,不明真相。。。。。
看着这个6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9眼熟,应该是PASSWORD(123456)的结果,。
Part2 修复以及真实原因推测
期间试了repair table无果。。
我看网上也说了,log里也说了,感觉不靠谱,索性试试吧。。
mysql_upgrade -uroot -p
倒是不错,提示了一堆。。
然后使用SequelPro修改用户还是报错。。打开mysql.user表发现诶结构怎么变了。。
看看原来的那条数据:
User | plugin | authentication_string
-----|------------------------------------------|----------------------
ug | 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | (空)
root | mysql_native_password | xxxxxx
恍然大悟!
原来是旧版的mysql.user表和新版的这个表格式是不一样的,正巧plugin字段是原来的password字段的位置,若是手工修改这个表也可以添加用户,但是若是使用数据库管理工具,他会按照新版的格式来改旧版的表...正好位置错了。。。。。。
不只是user表,许多表里面的结构都变了,此次升级包括TIMESTAMP数据类型也有所变化。。。。。。我说怎么有许多莫名其妙的小错误。。
修复倒是简单,用新版工具重新起个户头就可以了!
得到了一个以前从没重视过的教训:
从别的电脑搞来的数据库文件一定要mysql_upgrade一下啊!