MySQL5.5到5.7版本之间的迁移
这两天在做MySQL方向上的版本升级和高可用改造,在这个过程当中,还是遇到了不少的问题。从资源问题到级连的复制关系,虽然没有肉眼可见的困难环节,但是小细节还是挺多的,一不留神,可能会让你前功尽弃。
先说说为什么用5.7的这个版本吧,mysql5.7其实还是带来了很多方便的地方的,例如:
1、支持动态更改很多参数,不用重启数据库
2、支持GTID,这样搭建复制关系更加方便,主从节点之间的互相切换更加得心应手
3、sys schema系统库、并行复制等一系列新的功能
4、sql_mode参数的引入,使得SQL有了更加严格的校验过程,这样有利于写出更加标准的SQL,线上程序的鲁棒性更好
我使用MySQL版本升级的方法比较保守,就是在已有的5.5环境的基础上,搭建5.7版本的级连从库。架构类型如下:
这样级连的问题在于,5.5和5.7之间复制关系不能使用GTID的方式,只能使用传统的便宜量方式,而5.7和5.7之间需要使用GTID复制,但是业务一旦迁移到5.7上面来,就不允许重启了,所以只能在线做一个传统复制关系到gtid复制关系的切换,当然,这个切换的过程在之前的文章中有讲到,可以在线操作。
但是需要注意的是,搭建5.5到5.7版本的复制关系的时候,主库和从库的gtid_mode需要同步,否则MySQL会提示无法创建复制关系。而且修改在线的复制关系为GTID之后,还需要修改配置文件,这里我把这个过程整理一下:
MySQL5.5升级到MySQL5.7版本的步骤
1、搭建好2套MySQL5.7版本的实例,并配置好主从复制关系;
2、在MySQL5.5版本的服务器上对数据进行备份(只能使用mysqldump备份业务数据库,而且需要添加--master-data=2选项参数获取偏移量值,不能使用xtrabackup,因为从库不需要数据字典的内容,所以不能备份物理文件)
3、将MySQL5.7版本的数据库修改几个参数
3.1 sql_mode暂时设置成空值,保证数据恢复的过程中不会出错。
3.2 gtid_mode的值改为off,保证下一步中搭建复制能够成功
4、在MySQL5.7版本的主节点上进行上一步备份数据的恢复
,使用备份文件中的偏移量值搭建MySQL5.5版本服务器的5.7从库,并在从库上设置read_only和super_read_only的选项
5、复制MySQL5.5服务器上的MySQL账号、密码、权限和系统防火墙信息,保证服务切换到5.7版本的服务器上的可用性。
6、在MySQL5.5的主库设置read_only和super_read_only选项,保证5.5的主库临时不能写入,如下:
此时迅速将业务切换到MySQL5.7版本上,并且关闭read_only和super_read_only选项,并切断5.5到5.7的复制关系。
7、此时复制关系变成了下图:
8、在线将偏移量的复制方式切换为gtid的切换方式,具体方法之前的文章中有。切换完成之后,修改MySQL5.7主从服务器的my.cnf文件。否则下次重启的时候,gtid的方法会失效,出现不必要的麻烦。