原创

MySQL模拟全库被删恢复

背景:

作为开发,了解MySQL的各种功能很重要,虽然出了事情不需要自己动手,但是知道有这一回事很重要,如果MySQL数据库意外删除,可以通过每日定时全量备份和二进制日志增量恢复,

本文就简要演示从删库到恢复,本文只是演示最简单的流程,省略了各种拷贝,各种检查等等。

演示流程:

演示流程:
演示流程:

具体步骤:

1.模拟数据已经生成了很久

#重新生成二进制文件 flush logs;//这个含义是新开一个binlog文件 create database test2; #赋权 grant all privileges on . to gameboys@"%" identified by "gameboys";

use test2; DROP TABLE IF EXISTS t0; CREATE TABLE t0 ( id int(11) NOT NULL DEFAULT '0', name varchar(20) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO t0 VALUES ('1', 'sniper'); INSERT INTO t0 VALUES ('2', 'lisa'); INSERT INTO t0 VALUES ('3', 'lisaaaaa'); INSERT INTO t0 VALUES ('4', 'lisi');

2.每日业务低峰期定时全量备份 mysqldump -h192.168.1.10 -ugameboys -pgameboys test2> /tmp/test2_bak.sql

3.正常业务新增数据, INSERT INTO t0 VALUES ('5', 'wangwu'); INSERT INTO t0 VALUES ('6', 'liliu'); INSERT INTO t0 VALUES ('7', 'sniperseven'); INSERT INTO t0 VALUES ('8', 'lisaooo'); select * from t0;

4.模拟手误删除了数据表 delete from t0; INSERT INTO t0 VALUES ('9', 'laaaaaaaaaaaaaaa'); INSERT INTO t0 VALUES ('10', 'bbbbbbbbbbbbb'); select * from t0;

5.发现数据被删,赶紧找到二进制文件,解压 mysqlbinlog /data/mysql/data/mysql-bin.000009 >/data/mysql/data/test2.txt

6.通过全量备份数据恢复 mysql -h192.168.1.10 -uttdt -pttdt1234 test2 --character-set=utf8 < /tmp/test2_bak.sql 7.通过二进制日志恢复增量 vim进入test2.txt,删除delete语句 mysql -h192.168.1.10 -uttdt -pttdt1234 test2 --character-set=utf8 < /data/mysql/data/test2.txt

总结:

本文演示了MySQL全量备份+增量备份,需要定期演练,以至于遇到不会束手无策。 规避方法有两种: 开启mysql的安全模式,防止update和delete没有加上where条件。 show variables like 'sql_safe_updates'; set sql_safe_updates=1; //安全模式打开状态 set sql_safe_updates=0; //安全模式关闭状态 账号分离,只给业务开发同学 DML 权限,而不给 truncate/drop 权限。

正文到此结束