記一次生產環境基於表級別的數據異地恢復

2019-12-10     波波說運維

概述

binlog2sql是一個開源的Python開發的MySQL Binlog解析工具,能夠將Binlog解析為原始的SQL,也支持將Binlog解析為回滾的SQL,以便做數據恢復。

gihub:https://github.com/danfengcao/binlog2sql

今天主要分享一下最近做的生產環境表在異地恢復的過程。


生產環境數據異地恢復實驗

場景:某個資料庫庫沒做備份,開發發現有一張表數據有點問題,想要將表恢復到早上6點時的數據

思路:

1)將生產環境資料庫遷移到測試環境,同時複製mysql-binlog.index和所有的binlog到測試環境資料庫,注意測試環境資料庫配置要指定生產環境複製過來的binlog位置

2)在測試環境安裝binlog2sql工具

3)通過binlog2sql轉換故障時間段的binlog生成回退sql,在測試環境回退數據

環境:centos7.3、python2.7.9


1、生產環境數據遷移

1.1、數據遷移

--生產環境

mysqldump -uroot -p pas_prod>/opt/pas_prod.sql

--測試環境

mysql -uroot -p pas_prod


1.2、測試環境配置

#二進位配置
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full
server-id = 1
log-bin = /data/log/mysql-bin.log
log-bin-index =/data/log/binlog.index
log_bin_trust_function_creators=1
expire_logs_days=7

1.3、複製binlog

複製生產環境binlog,測試環境配置指定到binlog位置



2、測試環境(外網環境)安裝binlog2sql

git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt



3、在測試環境授權

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO binlog2sql@'%' identified by 'binlog2sql';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO binlog2sql@'localhost' identified by 'binlog2sql';



4、解析binlogsql

python /root/binlog2sql/binlog2sql/binlog2sql.py -h172.16.10.123 -ubinlog2sql -p binlog2sql -dpas_prod -t t_att_overtime_application
--start-file='mysql-bin.000007' --start-datetime='2019-12-04 05:00:00' >/tmp/binlog.sql

在這裡確定要回退的binlog和對應的時間範圍



5、生成回滾sql

python /root/binlog2sql/binlog2sql/binlog2sql.py --flashback -h172.16.10.123 -ubinlog2sql -p binlog2sql -dpas_prod \\
-t t_att_overtime_application --start-file='mysql-bin.000007' --start-datetime='2019-12-04 05:00:00' >/tmp/rollback.sql


確認後在測試環境執行即可。


覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~


文章來源: https://twgreatdaily.com/umca8W4BMH2_cNUgUlFj.html