一、为何需要升级
1、初期业务量小,RDS配置买低了
2、产品需求增多了,初期设计的表结构要有所变化
直接在阿里云选择给RDS更改配置会造成一段时间整库不可用,执行增删改sql语句也会造成锁表的情况。这些都会直接影响前台用户的使用,如果数据量少可能瞬间就改完了,但是数据量大的话就无法容忍了。所以终极目标就是在绝对保证用户无感知的前提下,把RDS升级工作完成。
1、评估现有的RDS实例配置
升级的数据源必须是现有RDS实例的主库,因为全量同步后是需要用主库的binlog做增量同步的。如果现有主库压力已经很大,就必须选择已经相对业务量小的时候去做,以免对现有主库造成冲击。
2、购买一个按时计费的RDS实例
这个实例必须大于等于现有RDS主实例的配置,如果业务量很大读写繁重的话,建议给这个临时RDS主实例下再创建个只读实例。
3、按照现有RDS实例去配置临时RDS实例的白名单
一定要把临时主RDS实例的库建好,读写账号及白名单都配置好以后再去创建它的只读实例,否则极容易出现主从库的白名单不一致的问题。
1、创建一个DTS迁移任务,数据源是现有RDS主实例(只需要给只读账号就可以了)目标是新创建的临时RDS实例(必须给具有写权限的账号),一定把全量和增量迁移都勾选上。
2、输入账号密码后选择你需要迁移的表(不需要升级的表可以不选)会进行迁移前的检查工作,这个RDS到RDS一般都不会有什么问题。
3、再校验通过后不要着急点开始迁移,这时候navicat连到临时RDS库看下应该有了刚刚选择的几张表,只不过都是空表没有内容的。然后就可以执行增字段,修改索引等sql语句了。
4、如果通过校验后没有发现空表就直接点开始迁移。整个迁移工作分成3部分,创建表结构、全量同步、增量同步。可以在创建表结构的时候暂停迁移任务,把已经创建的表删掉重新手工创建符合自己要求的表,然后再继续开始迁移也是可以的。
5、都修改好了确认无误后,再去DTS页面上开始迁移就可以了。这个要看数据量的多少以及RDS配置的高低。给个参考值,6G内存、3000IOPS的RDS实例,同步6000万行数据不到30G的库文件大小大概不到1小时能全部迁移完。
6、全量迁移任务完成后,DTS会自动继续做增量同步,正常的增量同步大概会显示延迟1-5秒之间。这时需要修改线上程序代码,把连接原有RDS实例的地方修改为连接临时RDS实例,注意如果是仅仅迁移部分表的话,程序里还需要配置哪些表读老库哪些表读中转库。
7、程序修改好后千万别着急上线,因为代码部署在N台服务器上,发布程序不可能同时生效的。所以这时候应该去修改临时RDS实例表里的主键ID,根据业务繁忙程度和同步线上代码的时间增加一定数量级的自增ID。
8、最后更新线上代码,把所有服务都迁移到读写临时临时RDS上,然后观察两边RDS读写是否正常。不出意外的话线上程序都更新完毕后,旧RDS实例的那些表就不会再有变化了。
9、确认临时RDS实例正常工作后,终止DTS迁移任务,修改老RDS实例上的表名为表名_old以备校验查询。
10、再次创建一个新的DTS迁移任务,这次数据源是临时RDS实例目标是原来的RDS实例。因为临时RDS里的表、字段、索引都已经符合要求了,这次就无需再写任何sql语句,只需要确认空间够用,表名不要重复就ok了。
11、待DTS任务达到增量同步1-5秒延迟的时候,再次修改原有RDS实例里的自增ID,然后再把线上程序恢复成之前读写原有RDS实例的配置。再次发布代码后,确认读写正常,停止这个DTS迁移任务就算整体完工了。
1、一定要找业务低峰时进行操作
2、DTS迁移任务的时候要时刻注意IOPS的压力
3、如果有主从RDS实例千万注意,主库是多线程写的,而从库是单线程同步的。所以DTS主库迁移成功了,从库要追很久才能同步。
4、严格按照顺序操作,每步都要想好确定无误了再做下一步。
5、千万别忘记更新程序后,把DTS迁移任务结束。如果不结束的话,很可能造成不可估量的严重后果!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。