升级mysql

业务是 ,5.0,和5.1的升级到5.6.10 ,engine 有innodb 共享tablespace ,myisam ,两者都有。

instance 的schema 很多。

升级测试,之前的数据库mysqldump --all-database dump 出来,然后导入新的5.6里面去

用root登录

show grants 

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION

不对啊,正常应该是

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |

而且没法用grant 改root@localhost的密码,就是说这样dump出来再导入是有问题的。权限表没有被修复。

mysql_upgrade的本质是三步,其中有重要的一步就是fix 权限表。多用户状态下,权限表不能用意味着用户没法用。

当然这里没用mysql_upgrade,这里用的是逻辑备份,也就是说不能无脑的mysqldump --all-database,再导进去,这样权限表会有问题,

试了一下,发现这样做可行,分别导出schema ,然后分别导入,最后用脚本修复权限表。这样应该兼容性会非常不错。

导出权限,我用了

http://www.cnblogs.com/sunss/archive/2011/01/05/1926156.html 这里的方法。这样基本上完全ok了。5g数据量也不大,中断1小时可以搞定。

====================================================

这里发现一个问题,就是5.6 ,password 用了新的hash算法,和5。1的不一样了,grant会报错。看来只好把密码找出来脚步 写个sql 语句连接一下了,好像,所以用户的权限都是类似的,一个用户对应一个schema .虽然5.6提供了一个参数,old_password=1 可以兼容以前的hash ,但是试下来似乎不行的。

原文地址:https://www.cnblogs.com/gqdw/p/2910905.html