当一个零碎存在很长一段时间后,常常会应用更新的技术来进步性能、可维护性或增加新个性。其中一个变动可能会是应用哪个数据库。这可能是最艰难的扭转。在迁徙过程中,有两个数据源,这使得该零碎成为一个分布式系统。在分布式系统中,保持数据统一十分艰难,而且很容易出错。在本文中,咱们将摸索一种在迁徙期间保持数据一致性的办法,并且这种办法的停机工夫较短。
前提条件
为了应用本文形容的办法,须要满足一些要求:
- 源数据库反对捕捉数据更改(CDC)的办法,如MySQL的bin log。
- 源数据库能够导出统一的数据,并且能够在数据更改日志中标记地位。
- 指标数据库反对ACID事务。
- 源和指标数据库都反对读写权限管制。
步骤
制订以下迁徙步骤的两个根本想法:
- 在给定的工夫点上,客户端只向其中一个数据库写入,从而防止了分布式事务易出错、处理速度慢的问题。
- 通过设置数据库权限来实现数据库切换。这比从客户端代码切换要快,而且更容易确保所有客户端都切换。
上面是具体步骤。
1.将源数据库转储到指标数据库
首先,咱们须要源数据库能够导出统一的数据。标记好已转储的地位。例如,在 MySQL 中,能够在应用 mysqldump
转储数据库时带上 --master-data
选项,这样生成的文件中就会记录 bin log 日志的地位( 应用文档 )。从源数据库取得所有数据后,能够将它们插入指标数据库。
因为这是第一步,所以即便失败了也很容易解决:从新开始即可。因而,重要的是,在导入转储数据时,任何谬误都要捕捉。
2. 捕捉源数据库的更改
下一步是捕捉源数据库的更改。例如,在 MySQL 中,能够应用 bin log 捕捉更改并将其插入到指标数据库中。因为上一步记录了开始地位,所以咱们晓得从哪里开始解析和导入更改。
举荐浏览:
深入浅出Redis,十年阿里架构师分享:有了它还怕不懂Redis原理?
字节跳动总结的设计模式 PDF 火了,完整版凋谢分享
刷Github时发现了一本阿里大神的算法笔记!标星70.5K
月薪不到30k的程序员是听不懂这个我的项目的
为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我懂了
程序员达到50W年薪所须要具备的常识体系。
对于【暴力递归算法】你所不晓得的思路
看完三件事❤️
如果你感觉这篇内容对你还蛮有帮忙,我想邀请你帮我三个小忙:
点赞,转发,有你们的 『点赞和评论』,才是我发明的能源。
关注公众号 『 Java斗帝 』,不定期分享原创常识。
同时能够期待后续文章ing????