
前提条件:
1.具备全量备份(mysqldump)。
2.除全量备份以外,还有全量备份之后产生的的所有binlog增量日志。
环境准备
(1)准备环境:
drop database clsn;CREATE DATABASE clsn;USE `clsn`;CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;INSERT INTO `test` VALUES (1,'clsn'),(2,'znix'),(3,'inca'),(4,'zuma'),(5,'kaka');
查看创建好的数据
mysql> select * from test;
+----+------+| id | name |+----+------+| 1 | clsn || 2 | znix || 3 | inca || 4 | zuma || 5 | kaka |+----+------+5 rows in set (0.00 sec)
(2)模拟环境:
mkdir /data/backup -p date -s "2017/12/22"
全备份:
mysqldump -B --master-data=2 --single-transaction clsn|gzip>/data/backup/clsn_$(date +%F).sql.gz
模拟增量:
mysql -e "use clsn;insert into test values(6,'haha');" mysql -e "use clsn;insert into test values(7,'hehe');" mysql -e "select * from clsn.test;"
(3)模拟误删数据:
date -s "2017/12/22 11:40" mysql -e "drop database clsn;show databases;"
出现问题10分钟后,发现问题,删除了数据库了.
恢复数据准备
(1)采用iptables防火墙屏蔽所有应用程序的写入。
[root@clsn ~]# iptables -I INPUT -p tcp --dport 3306 ! -s 172.16.1.51 -j DROP #<==非172.16.1.51禁止访问数据库3306端口。
或采用mysql 配置参数,但是需要重启数据库
--skip-networking
复制二进制日志文件
cp -a /application/mysql/logs/clsn-bin.* /data/backup/
截取日志
zcat clsn_2017-12-22.sql.gz >clsn_2017-12-22.sql sed -n '22p' clsn_2017-12-22.sql mysqlbinlog -d clsn --start-position=339 clsn-bin.000008 -r bin.sql
需要恢复的日志:
1.clsn_2017-12-22.sql2.bin.sql grep -i drop bin.sql sed -i '/^drop.*/d' bin.sql
进行数据恢复
恢复数据
[root@db02 backup]# mysql <clsn_2017-12-22.sql
[root@db02 backup]# mysql -e "show databases;
"+--------------------+| Database |+--------------------+| information_schema || mysql || clsn || znix || performance_schema |+--------------------+
查看数据库
mysql> select * from test;
+----+------+| id | name |+----+------+| 1 | clsn || 2 | znix || 3 | inca || 4 | zuma || 5 | kaka |+----+------+5 rows in set (0.00 sec)
恢复增量数据:
[root@db02 backup]# mysql clsn <bin.sql mysql> select * from test;+----+------+| id | name |+----+------+| 1 | clsn || 2 | znix || 3 | inca || 4 | zuma || 5 | kaka || 6 | haha || 7 | hehe |+----+------+7 rows in set (0.00 sec)
恢复完毕。
调整iptables允许用户访问.
1.4.5 多个binlog问题
mysqlbinlog -d clsn --start-position=339 clsn-bin.000009 clsn-bin.0000010 -r bin1.sqlmysql clsn <bin1.sql

