数据的还原操作mixed和row的操作

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

MySQL备份策略:全备+增量备份主要包括以下几个步骤:

1、开启BINLOG服务

2、使用MYSQLDUMP对数据库进行完全备份

3、使用flush logs指令刷新创建新的2进制日志

4、使用mysqlbinlog logs-bin.[0-9]* |mysql进行增量备份的恢复

一般的,假设我们周日下午3点进行了完全备份并生成备份文件full_backup_20170215.sql,周1周2中午1点进行了两次增量备份,

分别生成增量备份文件mysql-bin.000018,mysql-bin.000019,周3上午10点数据库发生奔溃,需要进行数据恢复,此时正在记录的

2进制日志为mysql-bin.000020,需要恢复其中记录的操作,具体为:

1、恢复全备

2、恢复BINLOG(备份后的BINLOG文件:mysql-bin.000018,mysql-bin.000019,mysql-bin.000020)

##binlog文件可以导成SQL文件或者直接用/usr/local/mysql/bin/mysqlbinlog mysql-bin.000018,mysql-bin.000019,mysql-bin.000020|mysql

这样导入也是可以的,导成SQL文件,不需要加任何参数mysqlbinlog mysql-bin.000020>a20.sql



全备+增量备份

周日全备,周1、2、3是增量,周3删除数据,周4、5、6继续增量,还原周3误删除的数据:

1、还原全备

2、还原增备(1,2,4,5,6)

3、对周3的BINLOG 文件导成SQL文件,找到删除的数据行前加#号,然后在还原周3的增量

全局替换sed -i "s/delete/#delete/g" aa17.sql, 基于binlog_format=mixed


################################################

对于在row模式下,误删除某些数据,要立刻还原的操作

基于row模式的binlog,生成DML(insert/update/delete)的rollback语句

通过mysqlbinlog -v 解析binlog生成可读的sql文件

提取需要处理的有效sql

    "### "开头的行.如果输入的start-position位于某个event group中间,则会导致"无法识别event"错误


 将INSERT/UPDATE/DELETE 的sql反转,并且1个完整sql只能占1行

     INSERT: INSERT INTO => DELETE FROM, SET => WHERE

     UPDATE: WHERE => SET, SET => WHERE

     DELETE: DELETE FROM => INSERT INTO, WHERE => SET

 用列名替换位置@{1,2,3}

     通过desc table获得列顺序及对应的列名

     特殊列类型value做特别处理

 逆序

 

 注意:

    表结构与现在的表结构必须相同[谨记]

    由于row模式是幂等的,并且恢复是一次性,所以只提取sql,不提取BEGIN/COMMIT

    只能对INSERT/UPDATE/DELETE进行处理

代码作者不详,能用就好o(∩_∩)o :

使用过程简单:

1、添加连接数据库的用户名和密码

2、在/usr/bin目录下不要有其他版本的mysqlbinlog文件,和当前版本统一

3、执行脚本 perl binlog_rollback.pl -f './mysql-bin.000020' -i -o  '/tmp/t.sql' -u 'dlan' -p 'root123'

4、代码包下载  http://down.51cto.com/data/2287584



本文转自 DBAspace 51CTO博客,原文链接:http://blog.51cto.com/dbaspace/1898120

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
关系型数据库 MySQL 测试技术
MySQL中,当update修改数据与原数据相同时会再次执行吗
MySQL中,当update修改数据与原数据相同时会再次执行吗
41 0
|
SQL 数据库 数据库管理
如何判断binlog的格式是ROW或者STATEMENT
有时接到一个binlog需要恢复,不知道是STATEMENT或是ROW格式,需要找源数据库的dba问,其实自己可以判断
|
缓存 Oracle 关系型数据库
利用BBED恢复UPDATE修改前的值
BBED工具介绍: BBED stands for Block Browser and EDitor. BBED只是一款工具,类似于ultraEdit,单纯的会用BBED来修改数据没有任何意义!关键是要知道为什么要这么改! 在充分了解Block格式和Oracle的各种机制的基础上广泛使用BBED, 用它来帮你构造测试案例,用它来帮你验证测试结果,用它来帮你深入理解Oracle!
|
关系型数据库 MySQL iOS开发
MySQL中update修改数据与原数据相同会再次执行吗
背景 本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗? 测试环境 MySQL5.7.25 Centos 7.4 binlog_format为ROW 参数 root@localhost : (none) 04:53:15>...
2436 0
|
人工智能
十一:参数binlog_row_image(笔记)
一、设置过程 插入前先调用TABLE::mark_columns_per_binlog_row_image函数函数中有image的详细设置 /* Mark columns according the binlog row image option.
720 0
|
SQL 关系型数据库 MySQL
如何查看二进制日志ROW模式下最原始的SQL语句
如何查看二进制日志ROW模式下最原始的SQL语句
3643 0
|
关系型数据库 MySQL Linux
|
关系型数据库 MySQL