MySQL使用,mysqldump + binlog完整恢复被删除的数据库的方法

  介绍

这篇文章主要讲解了MySQL使用,mysqldump + binlog完整恢复被删除的数据库的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

在日常MySQL数据库运维过程中,可能会遇到用户误删除数据,常见的误删除数据操作有:

    <李>用户执行删除,因为条件不对,删除了不应该删除的数据(DML操作); <李>用户执行更新,因为条件不对,更新数据出错(DML操作); <李>用户误删除表删除表(DDL操作); <李>用户误清空表截断(DDL操作); <李>用户删除数据库删除数据库,跑路(DDL操作) <李>…等李

这些情况虽然不会经常遇到,但是遇到了,我们需要有能力将其恢复、下面讲述如何恢复。

如果要将数据库恢复到故障点之前,那么需要有数据库全备和全备之后产生的所有二进制日志。

全备作用:使用全备将数据库恢复到上一次完整备份的位置;

二进制日志作用:利用全备的备份集将数据库恢复到上一次完整备份的位置之后,需要对上一次全备之后数据库产生的所有动作进行重做,而重做的过程就是解析二进制日志文件为SQL语句,然后放到数据库里面再次执行。

举个例子:小明在4月1日晚上8点使用了,mysqldump对数据库进行了备份,在4月2日早上十二点的时候,小华不小心删除了数据库,那么,在执行数据库恢复的时候,需要使用4月1日晚上的完整备份将数据库恢复到“4月1日晚上8点”,那4月1日晚上8点以后到4月2日早上12点之前的数据如何恢复呢?就得通过解析二进制日志来对这段时间执行过的SQL进行重做。

(3.1)实验目的

在本次实验中,我直接测试删库,执行删除数据库lijiamandb确认是否可以恢复。

(3.2)测试过程

在测试数据库lijiamandb中创建测试表test01和test02,然后执行,mysqldump对数据库进行全备,之后执行删除数据库,确认数据库是否可以恢复。

<强> 强创建测试数据,为了模拟日常繁忙的生产环境,频繁的操作数据库产生大量二进制日志,我特地使用存储过程和事件产生大量数据。

创建测试表:

使用lijiamandb; test01创建表
  (
  id1 int not null auto_increment,
  名字varchar (30),
  主键(id1)
  );
  
  创建表test02
  (
  id2 int not null auto_increment,
  名字varchar (30),
  主键(id2)
  );

创建存储过程,往测试表里面插入数据,每次执行该存储过程,往test01和test02各自插入10000条数据:

创建定义者=案盄“%”程序“p_insert”()
  开始
  #例行的身体就在这里…
  声明str1 varchar (30);
  声明str2 varchar (30);
  声明我int;
  集我=0;
  
  虽然我& lt;10000做
  设置str1=子串(md5 (rand ()), 1,25);
  插入test01(名字)值(str1);
  设置str2=子串(md5 (rand ()), 1,25);
  插入test02(名字)值(str1);
  我=+ 1;
  结束时;
  

结束制定事件,每隔10秒钟,执行上面的存储过程:

使用lijiamandb;
  如果不存在e_insert创建事件> mysql>显示变量如& # 39;% event_scheduler % & # 39;;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | | Variable_name |值
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | event_scheduler | |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  
  mysql>集全球event_scheduler=> mysql>集全球event_scheduler=;
  查询好,0行影响(0.00秒)
  
  mysql>从test01 select count (*);
  +----------+
  | | count (*)
  +----------+
  | 930000 |
  +----------+
  行集(0.14秒)
  
  mysql>从test02 select count (*);
  +----------+
  | | count (*)
  +----------+
  | 930000 |
  +----------+
  行集(0.13秒)

删除数据库

mysql>减少数据库lijiamandb;   查询好,2行影响(0.07秒)

使用,mysqldump的全备导入

mysql>创建数据库lijiamandb;   查询好了,1行影响(0.01秒)      mysql>退出   再见   [root@masterdb binlog] # mysql -uroot -p123456 lijiamandb & lt;/mysql/备份/lijiamandb.sql   mysql(警告):使用一个密码> [root@masterdb binlog] # mysql -uroot -p123456 lijiamandb      mysql>从test01 select count (*);   +----------+   | | count (*)   +----------+   | 753238 |   +----------+   行集(0.12秒)      mysql>从test02 select count (*);   +----------+   | | count (*)   +----------+   | 753238 |   +----------+   行集(0.11秒)

MySQL使用,mysqldump + binlog完整恢复被删除的数据库的方法