mysql binlog备份恢复数据库_mysql 通过备份和binlog恢复数据

模拟数据库被×××,导致数据库被删除后的恢复操作。

1.先来个全备:

mysqldump -uroot -pgq266566 -A --master-data=2  > all.sql

2.模拟线上生产环境。备份完后会有新的修改。

dffc7dd74a19259e591e86d51c0805f7.png

755edd7d2e3b9878c90f6d4ea8db65ea.png

39131f69c8fac4b2e60cd2e1a4d4aa23.png

3.然后模拟数据库被×××。chain_web被删除了。

235e9152efab05fecd1d0459570f7478.png

f9e9df1aea042bfdf5838a2f68414145.png

4.上线发现被删除,先用备份恢复chain_web库 。mysql -uroot -p123456 -o chain_web < all.sql

只恢复chain_web库。

6a4ffb538ce495e53a9864dde84c6dbb.png

f9e9df1aea042bfdf5838a2f68414145.png

恢复到备份时候的状态。

5.根据备份时候的--master-data=2 找到 position位置   在all.sql备份文件中。

f9e9df1aea042bfdf5838a2f68414145.png

e51cfda70922cced8beb7eaea730de42.png

6.从备份位置解析binlog

mysqlbinlog --no-defaults -v -v --base64-output=decode-rows--start-position=194 mysql-bin.000009 > test.sql

--base64-output参数用来控制binlog部分是否显示出来的,指定为decode-rows表示不显示binglog部分

找到drop时候的位置点。

f9e9df1aea042bfdf5838a2f68414145.png

0db60e8c216ba5cc301a9b9521f8baf2.png

可以看到是8029

然后再根据这俩位置 解析binlog:

mysqlbinlog   --start-position=194 --stop-position=8029 mysql-bin.000009 --database=chain_web  > test4.sql

(解析binlog的时候加--no-defaults -v -v --base64-output=decode-rows参数可以看到比较直观的sql,但是会出现无法导入数据库的现象.可以先加参数解析出来  查看解析结果确认没问题后,再不加参数进行解析,然后导入相应的库中。如果开了GTID的话,在解析时候加参数--skip-gtids=true)

(--datebase=chain_web 意思是只解析chain_web库的操作  因为只删除了chain_web库  chain库没有操作  不需要解析binlog  否则导入会报主键冲突)

vim test4.sql 可以看到没有drop语句了。然后就可以导入数据库中

mysql -uroot -p123456 chain_web < test4.sql

d5818da4f0033900309ef57e00fc4370.png

f9e9df1aea042bfdf5838a2f68414145.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值