mysql使用binlog备份恢复_利用mysqldump和binlog进行数据库备份和恢复操作

本文详细介绍了如何使用mysqldump进行全库和单库备份,结合binlog进行增量备份和恢复操作。通过实例展示了在不同场景下的数据恢复流程,包括全表更新后的数据恢复和误删操作的修复,强调了binlog在数据恢复中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

mysqldump用于备份数据,进行全库的全量备份,或者单库备份。

binlog用于增量备份,其增量备份的前提是建立在全量备份的基础之上的。

即一次完整的恢复需要mysqldump备份文件+binlog才能正确还原回数据。

———————————————————————————————————————————————————————————

一、使用mysqldump备份全库+binlog备份并进行恢复。

备注:此处binlog的格式为Mixed的,自己感觉设置为Mixed格式好一点。

1、首先创建test库和对应的表tb1、tb2

07f647ff91e945709ac82c310488b36d.png

2、进行全库备份

222f47cc777ac6ec302697c0fabddf9b.png

3、此时我们在往tb2表内添加一些数据,这时插入的记录记录在binlog中。

0acb6381ca4d05f7267f04fc474a3895.png

4、这时我们模拟误删操作,对tb2进行全表update

50eed68e8773eaa86c5c6d97ca804fe0.png

5、查看当前binlog文件名称【此时建议刷新下binlog---> flush logs】,这次的update同样也记录到binlog中。我这次测试没有刷新binlog,若刷新了binlog,则对应的操作应该在上一个binlog文件内。

e8081ec5fd2304b09ab18225a109ba0f.png

此时我们进行数据恢复

、、、

恢复思路:从全库备份中恢复test库,在利用binlog进行数据的增量恢复。

、、、

1、全备中恢复指定库

从 mysqldump 全备中恢复指定库,使用--one-database 简写-o的参数,极大地方便了我们恢复数据的灵活性

mysql -uroot -pTcdn@2007 -o test < all.sql

查看数据已经恢复到使用mysqldump备份前的状态了。

6076676bebc6d042d036f6f32fb6c4b1.png

2、在使用binlog进行增量备份,恢复7、8、9字段的数据

登录数据,查看binlog的events

6f82040604d0d01973f8b1b976ccfefc.png

060dcde53078be44457e4daa97f28135.png

我们看到在position位置为2304的时候进行了update操作,因此我们从start-position=123到stop-position=2132这段时间恢复,即跳过update操作。把mysqldump到产生binlog的这段时间所有的操作在回放以便。

使用mysqlbinlog 指定起始pos和结束pos进行恢复。

6ff8c117af6a5c78dbec33ac50a8bda5.png

这样我们就把数据恢复了。

二、现在我们在测试使用mysqldump进行单库备份+binlog增量备份进行数据测试。

1、首先和前面一样,创建两个表tb1、tb2

07f647ff91e945709ac82c310488b36d.png

2、然后我们在进行单库备份

79b3b9628715517dbb2c23cb36eb1ddf.png

这样我们就有了这样一个针对test库的一个备份(和生产环境备份策略一致)

3、同样我们进行数据插入和全表update操作。

95d9ecd056fcf86af2f3f86aa39d523c.png

06d8f14afc4197c8149c82489e2d3746.png

此时模拟误删操作了,并且此时我们刷新下binlog(原因为将误删操作截止到这个binlog,以便我们查找信息)

4、下面我们恢复数据。

735b937bd2e0d3b96f6b4ac714964325.png

此时看到已经恢复了部分数据,这是基于mysqldump的备份恢复的。

下来我们在利用binlog日志进行数据恢复

5、登录数据库内,查看binlog的events

6f82040604d0d01973f8b1b976ccfefc.png

02b21a9cd26ff6b4b47fedaddd1b5fe5.png

我们看到在position位置为7485的时候进行了update操作,因此我们从start-position=123到stop-position=7313这段时间恢复,即跳过update操作。把mysqldump到产生binlog的这段时间所有的操作在回放以便。

使用mysqlbinlog 指定起始pos和结束pos进行恢复。

51df398a0b04a43229d948b7667fb598.png

此时数据已经全部恢复了。

三、以上使用mysqldump备份数据的时候我们都是备份的全库或者单库的。而在实际的生产环境中我们一般也是这两种方式进行备份,我理解就是备份的比较粗略。没有细化到表。

但是一般我们误删的操作基本都是针对表或表里面的字段进行操作的。

因此我这边测试下了,备份的时候使用备份单库,但是恢复的时候把有问题的表从库中抽出来,然后在恢复。最后结合binlog进行数据还原。

1、首先test库内有两张表tb1、tb2

d5fd132c9a2837b2359e7805a143b686.png

2、此时我们进行单库备份,即备份数据库test

1ef4a6ab9b49581a438bf9d106e3f5b1.png

3、在tb2表内插入数据,并进行数据误删操作(全表update)

b2e9e93f1669102ab4b737db203dba8d.png

d0df6a67f5aa4d5c45325486da125dcf.png

此时刷新binlog

b8f38d60b0c615df8304eb91ce8c1ab3.png

4、此时恢复我们先从单库备份test.sql中把tb2这张表抽出来。使用sed -n即可

sed -n -e '/Table structure for table tb2/,/UNLOCK TABLES/p' test.sql > tb2_$(date +%F).sql

e65fdf3dd015fa741e6c25c1f9a0de26.png

然后我们在进行恢复(和前面一样的方式,只是后面的数据文件换了)

94e4cf30de1a8f798ae82a03951a11b3.png

5、此时我们在使用binlog这种方式进行增量恢复,进入到数据库内查看binlog的events。

mysql> show binlog events in "mysql-bin.000010";

ec122ac29392581bd563c9ff5fb75706.png

我们看到在position位置为16556的时候进行了update操作,因此我们从start-position=123到stop-position=16384这段时间恢复,即跳过update操作。把mysqldump到产生binlog的这段时间所有的操作在回放以便。

使用mysqlbinlog 指定起始pos和结束pos进行恢复。

361e8e49231380f30d2cb91d61963dc6.png

此时数据已经恢复了。

总结

数据库备份使用mysqldump+binlog的这种放手进行全量+增量的方式备份操作。

无论使用mysqldump的方式进行全库、单库、单表(此类型未测试,但感觉可以)备份。都能恢复数据库。在加上binlog这种增量的备份进行增量还原即可完成数据库的迁移,即出现误操作的时候可以使用这种方式尝试进行恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值