京东云开发者|京东云RDS数据迁移常见场景攻略( 二 )


14 源端目标端版本必须一致吗?
数据迁移要求两边版本一致;数据同步目前支持低->高版本迁移 。
场景二:异地灾备用户经常会对数据有异地灾备的需求,京东云目前提供了两种方式 , 一种是可以配置跨地域备份同步,如下图:

京东云开发者|京东云RDS数据迁移常见场景攻略

文章插图
这种方式简单免费,会定期将最新备份同步到异地,缺点是数据是非实时的,如果灾备恢复会有数据丢失 。
另外一种方案是灾备同步(目前暂只支持MySQL),可以在京东云控制台创建一个异地灾备实例 , 然后利用DTS的数据同步功能将灾备实例和源实例进行数据同步,同步方式选择灾备同步 。和普通同步机制不同,灾备同步利用的是MySQL的原生复制 , 因此灾备实例和源实例是完全一致的,相当于一个异地的只读实例,这样就可以达到异地灾备的目的 。
对于灾备实例 , 有几点需要注意:
  • 灾备实例目前只支持和京东云MySQL进行同步,暂不支持自建或第三方云实例 。
  • 灾备实例无法进行变配/重启/主从切换等操作,需要提前选好规格 。
  • 灾备实例也是主从实例 , 可以读但无法进行写操作,类似异地只读实例 , 可以手工提升为主备实例 。
  • 灾备实例是基于dts同步的,一旦手工结束同步,灾备实例将自动提升为普通主备实例 。
场景三:数据订阅很多业务场景都会用到数据订阅,比如订阅数据到ES扩展搜索、上下游订阅价格变更/服务通知、多业务库数据合并/构建宽表等 。京东云提供了数据订阅功能来满足类似需求,目前源端支持MySQL/Percona/MariaDB/PostgreSQL,目标端仅支持Kafka 。
目标端使用json格式记录订阅信息,下面是一个update操作的例子:
{"version": "0.1","database": "dbtest","table": "t1","type": "update","ts": 1582617997,"time_zone": "Asia/Shanghai","host": "mysql-internet-cn-north-1-c52cb616874d4d29.rds.jdcloud.com","data": {"created": "2020-02-25 16:01:46","flag": "10691","info": "dts_test","pkid": "11663","uuid": "11cae53d-57a5-11ea-98a6-fa163ea31339"},"old": {"created": "2020-02-25 16:01:46","flag": "10691","info": null,"pkid": "11663","uuid": "11cae53d-57a5-11ea-98a6-fa163ea31339"},"pks": {"pkid": "11663"}}数据订阅有几点需要注意:
  • 订阅的消息长度如果超过中间件的最大消息长度,消息将被丢弃,因此理论上会有丢失数据风险 。
  • 目标端接受的数据起点默认为订阅的实时时间点,如果需要全量订阅可以联系京东云技服人员 。
场景四:自建MySQL和云上MySQL相互复制用户经常有这样的需求,是否可以用自建MySQL来同步云上MySQL?或者反过来,是否可以云上MySQL作为自建MySQL的从库来满足某些场景?
  • 从MySQL复制机制来看,理论上应该都是可以的,但京东云的账号不支持赋予super权限,无法执行change master操作,所以云上MySQL无法作为自建MySQL的从库 。
  • 反过来,自建MySQL可以有super权限,是可以作为云上MySQL的从库 。但这个是非标准操作,并不建议用户使用 。主要原因是在某些情况下,会造成复制中断 。比如云上MySQL配置变更后需要主从切换,而此时自建从库和切换前的源主库有复制延迟 , 部分binlog还未传递到自建从库,此时主从切换后复新主库由于没有这些binlog,会造成自建从库报1236的错误 。针对这种情况,用户可以在扩容时选择延迟切换,可以避开业务高峰,在一定程度上避免类似问题 。
作者:翟振兴
【京东云开发者|京东云RDS数据迁移常见场景攻略】

推荐阅读