如何不停机迁移一个mysql INNODB 数据库?

如何不停机迁移一个mysql INNODB 数据库?
http://www.itpub.net/thread-1776724-1-1.html

使用MYSQL 5.5.27 服务器A上运行多个innodb 数据库,24x7 服务。其中一个数据库DBM1需要迁移到服务器B,DBM1的目录下磁盘文件的数据量为1TB左右, 有800+张表,其中实时更新的的有100多张表,它们的数据文件大小为100多GB。 innodb 已经配置为innodb_file_per_table。
要求迁移DBM1到服务器B,,迁移完成后,应用程序访问由A 立即切换到B,应用程序只能在切换时中断5分钟以内,同时要保证数据实时写入数据库,不能丢失数据。
想用replication, 或rsync ,但由于数据量较大,和实时写入数据不能丢失的要求,觉得实现比较困难。
请问有什么好的办法?或者工具?

 

答:

保证应用5分钟之内完成切换,且尽量不掉数据,方案肯定用复制。 问题在于复制的镜像如何做?
1、镜像一般两种:1)xtrabackup, 如果有myisam会有,才拷贝Myisam时会锁库,但时间很短。  2)你的库全部都是innodb表,使用mysqldump --single-transaction --master-date=2 
2、slave镜像选择:不建议使用mysqldump , 因为你原数据已经是1T,那么备份的文件也,怎么也得有700G以上(如果索引比较合理),备份速度不影响,但到目标机还原的时间就比较长了。
所以这里建议使用xtrabackup,  我们MySQL5.5.2x的使用1.63或者2.0的全备和增量备份都正常。
3、搭建主从库:xtrabackup备份完成后,根据binlog+pos,做成M-S , 原主机为M, 目标机为S. 这里处理注意几点:
1)xtrabackup备份的数据大小,相当于你目前datadir的du -h大小, 所以一定要注意你原机磁盘空间问题。 
2)从原主机到目标机传输时,scp过去使用-l限速,以免网卡打满,或者IO堵死了
3) 在目标机上如果磁盘不够, 比如你只有1.5T,xtrabackup不能做--copy-back, 好像2.0有个新参数,在回烤时只有一份。
4)目标作为从库时,修改一下复制my.cnf,只复制你要迁移的库。(如果单表的,可以使用blackhole engine来过滤不复制表)
5)M-S搭建起来后,把不用的库都drop掉。

4、在把应用切到目标机之前,把核心表warm-up一下, 比如用select count(*), 以免应用切到新机,完全冷数据,直接IO卡死了。    

你可能感兴趣的:(如何不停机迁移一个mysql INNODB 数据库?)