企业恢复案例
简介
背景:
正在运行的网站系统,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
#### 做应用割接