Mysql误删,恢复数据,binlog闪回,宝塔面板

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: binlog是二进制日志文件,用来记录Mysql内部对数据库的改动(只记录对数据的修改操作),主要用于数据库的主从复制以及增量恢复。 当我们搭建mysql主从复制的时候,两个实例之间也是通过binlog来完成数据的备份同步。 所以有这种根据binlog得到执行sql语句、闪回sql语句,我们只需要利用根据分析binlog,然后就可以找到准确的数据改动sql,并得到闪回sql,检查无误后执行就可以恢复数据了

写在前面


DBA或开发人员,有时会误删或者误更新数据 你是否有删库经历?删库是否真的无解 如果是线上环境并且影响较大,就需要能快速回滚。 传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据。 此法费时费力,甚至需要停机维护,并不适合快速回滚。 也有团队利用LVM快照来缩短恢复时间,但快照的缺点是会影响mysql的性能。 MySQL闪回(flashback)利用binlog直接进行回滚,能快速恢复且不用停机。 本文将简单进行mysql根据binlog闪回数据的实战测试


基础知识准备


binlog是二进制日志文件,用来记录Mysql内部对数据库的改动(只记录对数据的修改操作),主要用于数据库的主从复制以及增量恢复。 当我们搭建mysql主从复制的时候,两个实例之间也是通过binlog来完成数据的备份同步。 所以有这种根据binlog得到执行sql语句、闪回sql语句,我们只需要利用根据分析binlog,然后就可以找到准确的数据改动sql,并得到闪回sql,检查无误后执行就可以恢复数据了


准备工作


我们采用binlog2sql工具来分析,由上海美团DBA团队出品 使用的是python语言,所以我们需要提前安装好python语言 我使用的是宝塔面板,宝塔面板已经内置安装了python,所以直接开始安装更三十就好了


安装binlog2sql工具


cd /www/server
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt


开启mysql server主从配置


在mysql配置文件中填写以下内容


[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full


在宝塔面板中,有几个参数已经是开启的,我们无需修改,看以下内容


在软件管理 mysql 配置修改中 打开配置文件 在33行开始,有几个参数已经填写了,我们主要是修改binlog_format和row_image binlog文件储存位置默认是 /www/server/data 无需修改也可以


log-bin=mysql-bin
binlog_format = row
binlog_row_image = full
server-id = 1


开始实战


创建测试库、测试表、插入测试数据 然后执行delete 不带where条件 全部删除


mysql> select * from siamwp_links;
Empty set (0.01 sec)


接下来就是重点了,我们使用工具分析


查看当前的binlog文件名


mysql> show master status;


得到类似


+------------------+----------+--------------+------------------+-------------------+
 File              Position  Binlog_Do_DB  Binlog_Ignore_DB  Executed_Gtid_Set 
+------------------+----------+--------------+------------------+-------------------+
 mysql-bin.000006    613171                                                    
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)


我们记住mysql-bin.000006


打开binlog2sql工具分析


进入我们安装后的binlog2sql工具目录


cd /www/server/binlog2sql/binlog2sql
ll


可以看到这里面有py脚本


得到历史sql语句


python binlog2sql.py 
-h127.0.0.1 
-P3306 
-uroot 
-p'密码' 
-d数据库名 
刚刚查找的文件名
--start-file='mysql-bin.000006'   
后面的参数可以不带 筛选时间 
--start-datetime '2019-09-14 22:05:30' 
--stop-datetime '2019-09-14 22:05:45'


总的可能是这样子的语句 上面是为了讲解参数意义


python binlog2sql.py  -h127.0.0.1 -P3306 -uroot -p'密码' -dwww_siammm_cn --start-file='mysql-bin.000006' --start-datetime '2019-09-14 22:05:30' --stop-datetime '2019-09-14 22:05:45'


得到的大概是这样子的记录(这里为了演示方便 用了时间筛选 准确得到只有删除数据的log 正常情况下会有很多 需要耐心查找)


有三条语句 然后每一条语句的最后面还有这样子一段注释60fbc15b44570acf12e8e0018fb5cf40.png


#start 590075 end 590633 time 2019-09-14 22:05:35


这代表的是在log文件中的起始位置和结束位置


闪回sql语句


我们有了起始位置和结束位置,就可以利用工具,得到这一部分变化的闪回sql了 前面的大部分参数都一样 后面的筛选日期参数变成了起始位置和结束位置的值 还有一个-B即可


python binlog2sql.py  -h127.0.0.1 -P3306 -uroot -p'密码' -dwww_siammm_cn --start-file='mysql-bin.000006' -B --start-pos 590075 --stop-pos 590633


就可以得到insert的语句 复制出来,检查无误,就可以执行 恢复数据了

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
741 4
|
24天前
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志(Redo Log)和二进制日志(Binary Log)是两种重要的日志系统。重做日志主要用于保证事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务更改。二进制日志则记录了数据库的所有逻辑变化操作,用于数据的复制、恢复和审计。两者在写入时机、存储方式、配置参数和使用范围上有所不同,共同确保了数据库的稳定性和可靠性。
|
1月前
|
SQL 关系型数据库 MySQL
mysql数据误删后的数据回滚
【11月更文挑战第1天】本文介绍了四种恢复误删数据的方法:1. 使用事务回滚,通过 `pymysql` 库在 Python 中实现;2. 使用备份恢复,通过 `mysqldump` 命令备份和恢复数据;3. 使用二进制日志恢复,通过 `mysqlbinlog` 工具恢复特定位置的事件;4. 使用延迟复制从副本恢复,通过停止和重启从库复制来恢复数据。每种方法都有详细的步骤和示例代码。
183 2
|
2月前
|
SQL 关系型数据库 MySQL
MySQL误删怎么办?
本文详细介绍了如何通过MySQL的binlog日志恢复被误删除的数据。首先,确保binlog功能已开启并确认其模式(row模式更佳)。然后,通过查询binlog文件找到删除操作的具体位置。提供了两种恢复方案:一是直接找到并重放insert语句;二是通过逆向操作重新插入数据。文章还推荐了binlog2mysql等工具简化这一过程,帮助自动生成所需SQL语句。适合数据库管理员和开发者参考。
|
3月前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
342 11
|
2月前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
116 0
|
20天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1
|
22天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
36 4
|
2月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
66 3
Mysql(4)—数据库索引
|
29天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
166 1