MySQL数据库的无缝迁移

日期: 2010-09-12 作者:孙立 来源:TechTarget中国 英文

  mysql数据库的无缝迁移问题?

  问:在平时的开始过程中,由于经常“需求理解,架构设计,需求变更”等多种原因,导致系统运行一段时间后,数据库的表结构需要变更,如何实现尽量短的停机,实现无缝的迁移?

  我开玩笑说,最好的解决办法就是不迁移。不迁移肯定最好,这要依赖于非常好的设计,在前期架构设计的时候能够考虑到需求可能的变更,数据库设计也可以根据业务来进行一定程度的抽象。这可能有点太理想,不过迁移数据,始终是个不可避免的问题。下面说下一般的迁移方案。

  定点停机迁移

  就像那位朋友说的,在一个月黑风高的夜晚,停掉应用,用事先写好的迁移程序,把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了。这种方案的依赖比较大,相信小一点的公司可能都没有条件。

  总结:要实现无缝迁移,成本和难度肯定会增加,这需要结合你的业务需要来具体实施。迁移方案需要进行充分的测试,以及考虑出错的回滚方案。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

孙立
孙立

相关推荐