mysql迁移之巨大数据量快速迁移方案

mysql迁移之巨大数据量快速迁移方案-增量备份及恢复

--chenjianwen

一、前言:

  当mysql库的大小达到几十个G或者上百G,迁移起来是一件非常费事的事情,业务中断,导出导入耗费大量的时间;所以,需要考虑怎么去节省时间的问题。

二、方案:

  1.全备数据,备份后得到新的 binlog 日志文件

  2.将全备得到得 sql 大数据文件导入新库中【期间消耗大量时间】

  3.通过现在的 新的 binlog 日志文件 获取期间增量的数据 mysql-000166.sql

  4.将 mysql-000166.sql 直接导入到新库中

  5.修改业务连接mysql配置,启动服务

三、优点

  1.大大减少了导入新库所需要的时间,相当于减少了业务中断的时间

四、详细实施步骤

  1.全备数据库#!/bin/bash###用于迁服前导出数据库,并导入新的目标数据库。放到迁移目标ip执行,减少sql文件传输时间

MY_PATH=$(cd `dirname $0`; pwd)
cd $MY_PATH

_start_time=`date +%F_%T`
ip="192.168.1.30"  #源服务器内网ip
pub_ip="xxxx"  #源服务器外网ip
port=3306

time mysql -h${ip} -P${port} -uroot -pxxxx -e 'show databases;' | grep -Ev "Database|information_schema|mysql|performance_schema" | grep -v "^test$" | xargs mysqldump -uroot -pxxxx -h${ip} -P${port} --single-transaction --master-data=2 --flush-logs -BRE --set-gtid-purged=OFF --events > ./${pub_ip}_mysql.sql
#time mysqldump -uroot -pxxxx -h${ip} -P${port} --single-transaction --master-data=2 --flush-logs -BRE --set-gtid-purged=OFF --events zombie108 > ./zombie108_mysql.sql

if [ $? == 0 ];thentime mysql -h127.0.0.1 -P3306 -uroot -pxxx < ./${pub_ip}_mysql.sql  mysql-000166.sql
fi

_end_time=`date +%F_%T`
echo "start_time:${_start_time}"
echo "end_time:${_end_time}"




注释:
  --single-transaction:获取到innodb的一致性快照备份,在备份时不会锁表,而是通过其他机制来保证数据的一致性。这对于那些需要在不中断业务的情况下进行备份的系统来说是非常有用的。然而,如果其他会话在备份期间尝试进行写操作,它们将会被阻塞,直到备份完成并表锁被释放。
  
--flush-logs:刷新binlog日志
  -B:导出多个数据库
  -R:导出存储过程以及自定义函数
  -E:导出事件
  
--set-gtid-purged=OFF:关闭gtid复制

  2.制定正式迁移时间,停止业务,获取新增的binlog文件,将binglog转换成sql【建议尽量在一两天内完成,避免新增的binlog过大】

mysqlbinlog mysql-bin.000166 > mysql-bin.000166.sql

  3.将 mysql-000166.sql 直接导入到新库中

time mysql -h127.0.0.1 -P3306 -uroot -pxxx < ./mysql-000166.sql

  4.修改业务连接mysql配置,启动服

 

posted @ 2018-01-16 18:27  chenjianwen  阅读(7774)  评论(0编辑  收藏  举报