假设数据库备份策略是一周一次全备,每天一次增量备份,如果发生误删数据,在不使用第三方工具类似美团MyFlash以及binlog2sql 那么如何恢复?
1、找到离故障最近的一次备份,先将备份进行恢复。
2、然后利用截取binlog日志,找到最近一次备份到发生故障之间的二进制日志提交记录,截取日志进行备份到故障期间的提交事务进行恢复。
模拟全备
mysqldump -ucjr -pcjr -h47.107.168.31 -P 3306 -A -R -E --triggers --master-data=2 --single-transaction --max_allowed_packet=64M >/tmp/full_`date +%F`.sql
假设最近的一次备份中存在如下数据
database mdp下存在表t1 数据

在全备之后发生了如下操作,创建了t2 t3表

但是在之后有个误操作,删除了database mdp (mdp下有t1 t2 t3表)

t1 t2 t3 表未进行备份,在不使用第三方工具类似美团MyFlash以及binlog2sql等闪回工具的情况下如何进行恢复呢。
先利用最新的全备先恢复大部分数据
截取日志要先确认起点
[root@iZwz91m0zmp2djat3behgbZ tmp]# head -30 full_2020-03-04.sql-- MySQL dump 10.13 Distrib 5.7.23, for linux-glibc2.12 (x86_64)---- Host: 47.107.168.31 Database:-- -------------------------------------------------------- Server version 5.7.23-log/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;SET @@SESSION.SQL_LOG_BIN= 0;---- GTID state at the beginning of the backup--SET @@GLOBAL.GTID_PURGED='db0c3952-5475-11ea-9f45-00163e109fc5:1-6';---- Position to start replication or point-in-time recovery from---- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1052;
SET @@GLOBAL.GTID_PURGED='db0c3952-5475-11ea-9f45-00163e109fc5:1-6';
从这里看出备份中已经有1-6的事务提交号了,那么起点应该从7开始。
查看当前GTID执行到多少号了

查到删除库的事务是11号

因此截取日志的起始点是7,终点是10,因为11是删除操作,所以不能包含11
截取日志,生成sql
mysqlbinlog --skip-gtids --include-gtids='db0c3952-5475-11ea-9f45-00163e109fc5:7-10' data/3306/binlog/mysql-bin.000003 > /tmp/binlog.sql
恢复
source tmp/full_2020-03-04.sqlsource /tmp/binlog.sql

完成故障恢复
文章转载自MySQLDBA修炼之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




