一、MySQL-5.6 环境
#背景
1.备份策略:每天23:00,计划任务调用mysqldump执行全备脚本
2.故障时间点:上午10点开发人员误删除一个核心业务表,如何恢复
#恢复思路
1.挂维护页
2.找测试库测试
3.恢复周二全备
4.截取周二全备直到周三上午十点误删除之前binlog,并恢复
5.测试业务功能正常
6.恢复业务:
方案一:故障库导回到原生产
方案二:直接用测试库承当生产,先跑着。
#创建数据库进行模拟
mysql> create database backup character set utf8;
mysql> use backup;
mysql> create table xuesheng;
mysql> create table xuesheng(id int,name varchar(10));
mysql> insert into xuesheng values('1','张山'),('2','李四');
二、核心业务库被删,恢复
-A 等于 --all-databases,导出所有库
-B 指定库备份,只能指定库的名字
-F 备份数据的同时刷新binlog
-d 仅表结构
-t 仅数据
-E 备份事件
-R --routines 备份存储过程和函数数据
--triggers 备份触发器数据
--master-data=2 备份时进行打点,记录备份时的binlog位置点(必须开启binlog才能使用)
--single-transaction 快照备份
1.模拟周二全备 #(我这里没有设置密码,完整的需要加 -u用户 -p)
[root@db01 ~]# mysqldump -A -R -E --master-data=2 --single-transaction --triggers >/tmp/backup_`date +%F`.sql
2.模拟周三白天变化
mysql> use backup;
mysql> insert into xuesheng values('5','王五');
3.删除库
mysql> drop database backup;
Query OK, 1 row affected (0.00 sec)
4.找到起始位置点
[root@db01 ~]# vim /tmp/backup_2021-04-27.sql #在22行
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1320808;
5.找到结束位置点
[root@db01 ~]# mysqlbinlog --base64-output=decode-rows -vvv --start-position=1320808 /usr/local/mysql/data/mysql-bin.000003 > 1.txt
[root@db01 ~]# cat 1.txt
------------------------------
# at 1321041
#210427 19:05:05 server id 1 end_log_pos 1321139 CRC32 0x12ef3e7b Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1619521505/*!*/;
drop database backup
--------------------------------
5.截取binlog
[root@db01 ~]# mysqlbinlog --start-position=1320808 --stop-position=1321041 /usr/local/mysql/data/mysql-bin.000003 > /tmp/huifu.sql
6.恢复周二全备和
mysql> set sql_log_bin=0;
mysql> source /tmp/backup_2021-04-27.sql;
mysql> source /tmp/huifu.sql;