MySQL模拟备份与恢复

一、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;

posted @ 2021-09-22 16:17  泽野  阅读(42)  评论(0编辑  收藏  举报