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  

至此,目的端数据已经和远端对齐。这里面还有些要主要的细节来避免源端继续写入数据。

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