起因,线上数据库版本5.5.12比较低,升级到5.7.8支持json。
需要对线上正在使用的数据库做迁移,很少遇到这样的情况,考虑到没有长连接, 开始想到的方案很简单:
0、新建一个MySQL主从库
1、旧主单向往新主实时同步(毫秒级),新主不往旧主同步。
2、切换连DB的读账号信息,观察读是否正常。
3、切换连DB的写账号信息。
4、观察一段时间,旧库没有新写入内容即可断开往新主的同步。
实施的过程中遇到了很多问题,实际执行的方案如下:
0、申请新MySQL账号信息。
1、申请业务机授权访问新库。
2、业务机上做新库账号的联通性测试(一般跑脚本测试)。
3、确认旧库的长连接。
4、架双主,库中表自增ID区分单双号,老库中的表用单号,新库中的表用双号。老库往新库同步,新库不往老库同步。
老表:
SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 2 | | auto_increment_offset | 1 | +--------------------------+-------+
新表:
SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 2 | | auto_increment_offset | 2 | +--------------------------+-------+
5、灰度一台机器应用读新库。
6、全量下发读账号配置。
7、全量下发写账号配置。
8、观察N周删除老库。