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配置,啟動服

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM