企业恢复案例


简介

背景:
正在运行的网站系统,MySQL数据库,数据量25G,日业务增量10-15M。
备份策略:
每天23:00,计划任务调用mysqldump执行全备脚本
故障时间点:
上午10点开发人员误删除一个核心业务表,如何恢复?
############ 模拟数据 ################

## 状态一
mysql> select * from b.b;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+

## 状态二
mysql> select * from b.b;
+------+
| id   |
+------+
|   10 |
|    2 |
|    3 |
|    4 |
+------+

## 状态三
select * from b.b;
+------+
| id   |
+------+
|   10 |
|    2 |
|    4 |
+------+

## 状态四
drop table b.b;

mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction|gzip > /backup/full_$(date +%F).sql.gz

恢复到状态三操作

# 1.准备新环境
[root@db02 ~]# /etc/init.d/mysqld stop
[root@db02 ~]# rm -fr /app/mysql/data
[root@db02 ~]# /app/mysql/scripts/mysql_install_db --user=mysql --
basedir=/app/mysql --datadir=/app/mysql/data
[root@db02 ~]# /etc/init.d/mysqld start
root@localhost:(none):05: >grant all on *.* to root@'172.16.1.5%' identified by '123';
#### 恢复昨天的全备份
#----查询全备份前的 数据点
zcat /backup/full_2024-08-21.sql.gz  | head -25
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=120;
#----起始点: 120


#----查询删除前的节点
mysqlbinlog --base64-output=decode-rows -vvv /app/mysql/data/mysql-bin.000005|grep -iC 10 'drop table'
#----终结点:6990

-----------------------------------------------------------------------
#----查询删表后的数据点
mysqlbinlog --base64-output=decode-rows -vvv /app/mysql/data/mysql-bin.000005|grep -iC 10 'drop table'
#----起始点: 7101

#-----查询最后的数据点
ll -d /app/mysql/data/mysql-bin.000005
mysql> show master status;
#----种植点:17901
-----------------------------------------------------------------------
取出"全备"到"删表"时间内的所有数据
mysqlbinlog --start-position=120 --stop-position=6990 /app/mysql/data/mysql-bin.000005 > /tmp/inc1.sql

取出"删表后"到"停机维护"时间内的所有数据
mysqlbinlog --start-position=7101 --stop-position=17901 /app/mysql/data/mysql-bin.000005 > /tmp/inc2.sql
#### 新机器操作
第一时间 恢复全备
zcat  /backup/full_2024-08-21.sql.gz  | mysql -uroot -p111 -h172.16.1.52


##### 恢复删表之前的数据
mysql -uroot -p111 -h172.16.1.52 < /tmp/inc1.sql 


#### 恢复删表后到停止服务之间的数据 
mysql -uroot -p111 -h172.16.1.52 < /tmp/inc2.sql 

#### 做应用割接