mysqldump+mysqlbinlog mysql實時數據遷移方案

通常在運行的數據庫上做遷移,會出現備份開始到恢復成功之間的數據丟失的情況,本文將講解避免技巧。

假設要將 10.204.11.100 的 3306 端口實例遷移到 10.204.11.200上。

結合 mysqldump 和 mysqlbinlog 可以做到不停機實時遷移+數據不丟失的遷移。以下爲主要步驟,可以在此基礎上擴展改造。

# step1: 將遠端binlog拉取到目的端
10.204.11.200>mysqlbinlog --read-from-remote-server --raw --host=10.204.11.100 --user dba --password='***' --port 3306 -vv mysql-bin.033813 --stop-never --result-file=/data0/mysql/a/

mysql-bin.033813 爲 10.204.11.100 要讀取的第一個binlog文件,通常爲當前binlog,寫入目的端/data0/mysql/a/目錄備用。

#step2:mysqldump全量備份
mysqldump --host=10.204.11.100  --user dba --password='***' --port 3306 --opt --set-gtid-purged=OFF --single-transaction --master-data=2 --events --routines db_name >/data0/mysql/db_name.sql

#step3:恢復備份文件
 mysql -uroot -p"***" -S /tmp/mysql_3306.sock   < db_name.sql
 
#step4:補齊binlog 
從step2備份文件中讀取備份開始的偏移量 -- CHANGE MASTER TO MASTER_LOG_FILE='binlog.001002', MASTER_LOG_POS=27284;
假設/data0/mysql/a/最新的binlog爲 binlog.001004
mysqlbinlog --start-position=27284 binlog.001002 binlog.001003 binlog.001004 | mysql -uroot -p"***" -S /tmp/mysql_3306.sock  

至此,目的端數據已經和遠端對齊。這裏面還有些要主要的細節來避免源端繼續寫入數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章