MySQL数据库的备份和恢复之二

目录

我们来说恢复的第二种情况,就是需要从binlog中指定位置恢复

binlog如何设置不说了,我们假设上次用mysqldump做过一次全量备份。

1mysqldump -uroot -p  -h 192.168.1.35 -P3306 --opt --triggers -R --hex-blob  --single-transaction --flush-logs --master-data=2 -B 库名  > 库名.sql

由于我们在备份中使用了参数–flush-logs –master-data=2,所以 库名.sql 中会有binglog的信息供我们使用。

一、用mysqlbinlog来恢复

我们首先要查到随后的binlog文件是那个,从那时候起又生成多少个binglog文件。

然后去库里查询:

1show master logs;
2show master status;

image-20221122194020751

我们要分析一下SQL

1# show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
2
3show binlog events in 'javaboy_logbin.000002' limit 5,10;

我们来翻看日志:

image-20221122194528219

可以看到是从 764–>865 ,发生了删除,那么回放到这个764这个position前即可,764不会执行

1mysqlbinlog /var/lib/mysql/mysql-bin.000204 --stop-position=764 --database=bbb | mysql -uroot -p

–start-position指定从哪里开始恢复,如果不指定,就会从binlog文件开头的position开始

1mysqlbinlog /var/lib/mysql/mysql-bin.000204 --start-position=205 --stop-position=764 --database=bbb | mysql -uroot -p

二、用binglog2sql来恢复

binlog2sql 是大众点评公司的DBA 开发的一款基于通过解析binlog将delete 恢复为insert,update 的值 set 字段和where条件做对调的原理来恢复数据的。 使用限制 MySQL的binlog format 必须是row 安装

简单说它的道理就是变删为增,生成新的SQL执行。感觉 yearning 的回滚应该就是基于这个东西搞得。

地址:https://github.com/danfengcao/binlog2sql

解析出回滚的SQL:

1python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttest3 --start-file='mysql-bin.000002' --start-position=763 --stop-position=1147 > rollback.sql

回滚前务必再备份一下

1mysql -h127.0.0.1 -P3306 -uadmin -p < rollback.sql

MySQL数据库的备份和恢复之一
Freelancer之QRCode
comments powered by Disqus