https://github.com/danfengcao/binlog2sql
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt
-参数设置
[mysqld]
server_id = 128
log_bin = /data/mysql/mysql3306/logs/mysql-bin
max_binlog_size = 512M
binlog_format = row
binlog_row_image = full # 默认值,可以不显式设置
-创建恢复账号
create user data_rec@'192.168.56.%' identified by 'xxxxxxxx';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO data_rec@'192.168.56.%';
-解析出标准SQL
python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -t test3 test4 --start-file='mysql-bin.000002'
-生成恢复SQL
python binlog2sql.py --flashback -h 192.168.56.128 -udata_rec -p'xxxxxxxx' -d testdb -t t_test1 --start-file='mysql-bin.000003' --start-datetime='2020-09-18 16:29:08' --stop-datetime='2020-09-18 16:30:00' >/tmp/rec.sql
-恢复数据步骤
-查看目前的binlog文件
show master status;
-最新的binlog文件是mysql-bin.000052,我们再定位误操作SQL的binlog位置。
-误操作人只能知道大致的误操作时间,我们根据大致时间过滤数据。
python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-datetime='2016-12-13 20:25:00' --stop-datetime='2016-12-13 20:30:00'
-我们得到了误操作sql的准确位置在728-938之间,再根据位置进一步过滤,使用flashback模式生成回滚sql,检查回滚sql是否正确(注:真实环境下,此步经常会进一步筛选出需要的sql。结合grep、编辑器等)
python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-position=3346 --stop-position=3556 -B > rollback.sql | cat
-确认回滚sql正确,执行回滚语句。登录mysql确认,数据回滚成功。
mysql -h127.0.0.1 -P3306 -uadmin -p'admin' < /tmp/rollback.sql
-恢复数据
source /tmp/rec.sql;