MySQL数据恢复工具-binlog2sql SQL mysql


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;


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回