出于历史原因,今天看到停运一段时间的云服务器还有半年有效时间,上面跑着的MySQL连上去也是各种报错,但总的来说还是不影响测试时的使用。但在做实验时发现数据库无法支持 utf8mb4,因此要动手把它给升级了。
旧库版本 6.0,但MySQL官网最新版也才5.7,一开始以为是以前维护者下载了源码改版本后编译,在打开我自己用于记录数据库相关信息的记事本时,无意间看到以前配置过的 MySQL NDB 版截图,原来NDB就是6.x,与普通MySQL的5.x有相对应的关系。
1、数据导出,虽然它的数据可能已经不再有用,但出于运维安全的习惯,还是要做一次备份。导出的数据文件达 1.2G。
> mysqldump -h127.0.0.1 -uroot -p --all-databases > data.sql
2、停服务,MySQL在安装时已注册为windows服务,直接点击停止服务即可
3、卸载旧版MySQL,在添加删除程序中删除即可。
4、在官网下载最新安装程序,并安装之。
5、导入原数据
> mysql -h127.0.0.1 -uroot -p < data.sql
# 问题来了,导入时报错『 Unknown command ‘\n‘ 』,这数据才刚出炉不到半小时,版本虽然旧点但相差也不大,使用UtralEdit打开看不出有什么异常,思来想去,应该是字符集问题。查了下原来的表格,使用UTF8,加个参数试试,搞定!
> mysql -h127.0.0.1 -uroot -p --default-character-set=utf8 < data.sql
6、创建新用户
* 使用MySQL官网自带的GUI客户端连接,在创建新用户时提示
Unhandled exception: DbMySQLQuery.resultFieldStringValueByName():
MySQL_ResultSet::isNull: invalid value of ‘columnLabel‘
* 使用GUI不行,那我换命令行试试,创建过程可以,心里正小庆幸时,flush privileges 报错了
Flush Privileges in My SQL gives HY0000 Unknown Error
* 真是坑中坑,问题一个接一个,查了很多MySQL官方论坛对这个问题的解释,基本上都是建议恢复到原来的NDB版本,直到该问题被解决。拜托,我就是为了升级才换过来的,让我又回去,这不是瞎折腾嘛。
试着升级,MySQL中带有mysql_upgrade命令,官网对该命令有解释,检查并升级表。
> mysql_upgrade -h127.0.0.1 -uroot -p
出现很多个OK,中间还有一个很明显的修复操作,显示『Re-installing the sys schema』,再试用GUI,完成,各种操作都正常。
结论:对于开源软件数据库,如果没有精力应付时,尽量选择常规发布版,上了线再更换的机率更是微乎其微,能不动则不动。其它新鲜分支版就留给有时间、兴趣的人来研究吧。