美文网首页
如何在数据库迁移中保证数据一致性?

如何在数据库迁移中保证数据一致性?

作者: Java李太白 | 来源:发表于2020-12-10 19:16 被阅读0次

    当一个系统存在很长一段时间后,经常会使用更新的技术来提高性能、可维护性或添加新特性。其中一个变化可能会是使用哪个数据库。这可能是最困难的改变。在迁移过程中,有两个数据源,这使得该系统成为一个分布式系统。在分布式系统中,保持数据一致非常困难,而且很容易出错。在本文中,我们将探索一种在迁移期间保持数据一致性的方法,并且这种方法的停机时间较短。

    前提条件

    为了使用本文描述的方法,需要满足一些要求:

    • 源数据库支持捕获数据更改(CDC)的方法,如MySQL的bin log。

    • 源数据库可以导出一致的数据,并且可以在数据更改日志中标记位置。

    • 目标数据库支持ACID事务。

    • 源和目标数据库都支持读写权限控制。

    步骤

    制定以下迁移步骤的两个基本想法:

    1. 在给定的时间点上,客户端只向其中一个数据库写入,从而避免了分布式事务易出错、处理速度慢的问题。

    2. 通过设置数据库权限来实现数据库切换。这比从客户端代码切换要快,而且更容易确保所有客户端都切换。

    下面是具体步骤。

    1.将源数据库转储到目标数据库

    首先,我们需要源数据库可以导出一致的数据。标记好已转储的位置。例如,在 MySQL 中,可以在使用 mysqldump 转储数据库时带上 --master-data 选项,这样生成的文件中就会记录 bin log 日志的位置( 使用文档 )。从源数据库获得所有数据后,可以将它们插入目标数据库。

    因为这是第一步,所以即使失败了也很容易处理:重新开始即可。因此,重要的是,在导入转储数据时,任何错误都要捕获。

    2. 捕获源数据库的更改

    下一步是捕获源数据库的更改。例如,在 MySQL 中,可以使用 bin log 捕获更改并将其插入到目标数据库中。因为上一步记录了开始位置,所以我们知道从哪里开始解析和导入更改。

    推荐阅读:

    深入浅出Redis,十年阿里架构师分享:有了它还怕不懂Redis原理?

    字节跳动总结的设计模式 PDF 火了,完整版开放分享

    刷Github时发现了一本阿里大神的算法笔记!标星70.5K

    月薪不到30k的程序员是听不懂这个项目的

    为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我懂了

    程序员达到50W年薪所需要具备的知识体系。

    关于【暴力递归算法】你所不知道的思路

    看完三件事❤️

    如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:

    点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。

    关注公众号 『 Java斗帝 』,不定期分享原创知识。

    同时可以期待后续文章ing🚀

    相关文章

      网友评论

          本文标题:如何在数据库迁移中保证数据一致性?

          本文链接:https://www.haomeiwen.com/subject/ktvrgktx.html