【数据迁移】MySQL数据库的无缝迁移问题:binlog方案、触发器方案
来源:互联网 发布:住宅土地成交数据 编辑:程序博客网 时间:2024/05/01 13:10
问:在平时的开始过程中,由于经常“需求理解,架构设计,需求变更”等多种原因,导致系统运行一段时间后,数据库的表结构需要变更,如何实现尽量短的停机,实现无缝的迁移?
我开玩笑说,最好的解决办法就是不迁移。不迁移肯定最好,这要依赖于非常好的设计,在前期架构设计的时候能够考虑到需求可能的变更,数据库设计也可以根据业务来进行一定程度的抽象。这可能有点太理想,不过迁移数据,始终是个不可避免的问题。下面说下一般的迁移方案。
定点停机迁移
就像那位朋友说的,在一个月黑风高的夜晚,停掉应用,用事先写好的迁移程序,把mysql 数据库数据迁移到新结构的mysql数据库中。完成后,切换应用。最大的缺点就是随着数据量的增加停机时间会变得非常长。
mysql binlog方案
mysql的迁移可以考虑mysql的主从复制 replication的特性,解析binlog日志出来,然后根据新的业务特点设计的数据库结构,把数据写入到新的数据库,运行迁移过程不需要停机。在数据迁移基本上完成的时候,停掉前段应用,等待迁移全部完成,切换应用到新库。停机时间非常短,只需要几乎1-2分钟或者更少。
触发器方案
备份老的mysql数据表结构到新的mysql数据库,在新库创建新的表结构,更改老的数据库表,创建触发器,让数据的写入的时候同时写入到的心的mysql表。dump老的mysql的数据,导入到新的mysql,这是新的mysql表结构的表应该已经有相应的数据了。然后开启主从复制,让其达到跟主库数据一致。切换应用,迁移到的方案。停机时间非常短,只需要几乎1-2分钟或者更少。
mysql udf方案
mysql的udf允许你开发自己的函数集成到mysql中,这样你可以很方便的在数据写入的时候同时写到的其他地方。缺点是开发成本大,需要对mysql udf有了解。也可以用现成的memcached_functions_mysql和lib_mysqludf_json来实现,你就不需要编写udf函数了,只需要实现一个memcached的服务端来接受数据,然后解析json到新的数据库就OK了。memcached协议非常简单,自己实现起来也很容易。这种方案的迁移时间也会非常短。
中间件方案
这种方案必须要你的应用连接数据使用了类似中间层的方案,你只需要在中间层增加同时往新库写数据就OK了。这种方案的依赖比较大,相信小一点的公司可能都没有条件。
总结:要实现无缝迁移,成本和难度肯定会增加,这需要结合你的业务需要来具体实施。迁移方案需要进行充分的测试,以及考虑出错的回滚方案。
- 【数据迁移】MySQL数据库的无缝迁移问题:binlog方案、触发器方案
- mysql数据库的无缝迁移问题
- 拥有较大数据的mysql迁移方案
- 数据库迁移方案01
- 数据库迁移方案
- 数据库迁移方案思考
- 数据迁移方案(初)
- Oracle数据迁移方案
- MongoDB数据迁移方案
- Mysql数据库迁移Mariadb完整方案
- oracle 迁移数据方案(定制数据库模板)
- 不同场景下 MySQL 的迁移方案
- 不同场景下MySQL的迁移方案
- 不同场景下 MySQL 的迁移方案
- 不同场景下 MySQL 的迁移方案
- 不同场景下 MySQL 的迁移方案
- 不同场景下 MySQL 的迁移方案
- 迁移Oracle数据的两个方案(待续)
- 冒泡排序
- React学习之高级事件系统(二十七)
- 报数
- CF 787B
- Activity的生命周期
- 【数据迁移】MySQL数据库的无缝迁移问题:binlog方案、触发器方案
- 第六章 函数
- 数学黑洞
- HR PA信息类型的创建与增强
- C++中关于头文件<string>、<string.h>和<cstring>的区别
- ThinkPHP的中的报错
- NYOJ zb的生日
- 选择排序
- 淘宝天猫使用内部优惠券购物省钱指南