mysql数据安全一之数据恢复案例

--chenjianwen

应用场景:适宜开启binlog 日志功能,定时备份并使用--master-data参数备份,在某个时间点丢失数据,用于数据恢复

开篇总结:

(1)本案例适用于人为SQL语句造成的误操作或者没有主从复制等的热备情况宕机时的修复

(2)恢复条件为mysql要开启binlog日志功能,并且要全备和增量的所有数据

(3)恢复时建议对外停止更新,即禁止更新数据库

(4)先恢复全量,然后把全备时刻点以后的增量日志,按顺序恢复成SQL文件,然后把文件中有问题的SQL语句删除(也可通过时间和位置点),再恢复到数据库。

1.确保 MySQL 开启了 binlog 日志功能,并做好备份计划任务

2.mysql备份语句:mysqldump -uroot -pxxx -B -F -R -x --master-data=2 chenjianwen01|gzip >./chenjianwen01_$(date +%F).sql.gz

参数说明:
-B:指定数据库
-F:刷新日志
-R:备份存储过程等
-x:锁表
–master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息

3.解压保留源文件命令:gunzip -c chenjianwen01_2017-08-30.sql.gz > chenjianwen01_2017-08-30.sql

4.查看表中的数据:

mysql> select * from userinfo;
+----------+---------------+-----------+
| fuser_id | fuser_name | fuser_age |
+----------+---------------+-----------+
| 2 | chenjianwen02 | 22 |
| 3 | 陈建文 | 22 |
+----------+---------------+-----------+
2 rows in set (0.00 sec)

5.再次向数据表中插入数据:

mysql> show tables;
+-------------------------+
| Tables_in_chenjianwen01 |
+-------------------------+
| classinfo |
| userinfo |
+-------------------------+
2 rows in set (0.00 sec) mysql> desc userinfo;
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| fuser_id | int(11) | NO | PRI | NULL | auto_increment |
| fuser_name | varchar(64) | NO | | NULL | |
| fuser_age | int(11) | NO | | NULL | |
+------------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec) mysql> insert into userinfo (fuser_name,fuser_age) values ("chenjianwen03",22);
Query OK, 1 row affected (0.00 sec) mysql> insert into userinfo (fuser_name,fuser_age) values ("chenjianwen04",23);
Query OK, 1 row affected (0.00 sec) mysql> insert into userinfo (fuser_name,fuser_age) values ("chenjianwen05",21);
Query OK, 1 row affected (0.00 sec) mysql> select * from userinfo;
+----------+---------------+-----------+
| fuser_id | fuser_name | fuser_age |
+----------+---------------+-----------+
| 2 | chenjianwen02 | 22 |
| 3 | 陈建文 | 22 |
| 4 | chenjianwen03 | 22 |
| 5 | chenjianwen04 | 23 |
| 6 | chenjianwen05 | 21 |
+----------+---------------+-----------+
5 rows in set (0.00 sec)

6.此时误操作,删除了数据库

mysql> drop database chenjianwen01;
Query OK, 2 rows affected (0.02 sec)

此时,全备之后到误操作时刻之间,用户写入的数据在 binlog 中,需要恢复出来!

7.查看备份之后新增的 binlog 文件

[root@cjw_jdy backup]# cd /root/backup/
[root@cjw_jdy backup]# gunzip -c chenjianwen01_2017--.sql.gz > chenjianwen01_2017--.sql
[root@cjw_jdy backup]# grep CHANGE chenjianwen01_2017--.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000022', MASTER_LOG_POS=;

这是备份时刻的 binlog 文件位置,即 mysql-bin.000022 的 120 行,因此在该文件之前的 binlog 文件中的数据都已经包含在这个备份的 SQL 文件中了。

8.拷贝binlog 文件,并将mysql-bin.000022导出为sql文件,并删除里面的drop语句

[root@cjw_jdy backup]# cp /home/mysql/data/mysql-bin. .
[root@cjw_jdy backup]# ls
chenjianwen01_2017--.sql chenjianwen01_2017--.sql.gz mysql-bin.
[root@cjw_jdy backup]# mysqlbinlog -d chenjianwen01 mysql-bin. > mysql-bin..sql
[root@cjw_jdy backup]# ls
chenjianwen01_2017--.sql chenjianwen01_2017--.sql.gz mysql-bin. mysql-bin..sql
[root@cjw_jdy backup]# cat mysql-bin..sql | grep -i drop
[root@cjw_jdy backup]# rm -rf /home/mysql/data/mysql-bin.000022

注意:在恢复全备数据之前必须将该binlog文件移出,否则恢复过程中,会继续写入语句到binlog,最终导致增量恢复数据部分变得比较混乱。

9.恢复数据,导入前需要先创建数据库,查看表信息,没有备份后插入的数据

mysql> create database chenjianwen01 charset utf8;
Query OK, row affected (0.00 sec) [root@cjw_jdy backup]# mysql -uroot -p chenjianwen01 < chenjianwen01_2017--.sql mysql> select * from userinfo;
+----------+---------------+-----------+
| fuser_id | fuser_name | fuser_age |
+----------+---------------+-----------+
| | chenjianwen02 | |
| | 陈建文 | |
+----------+---------------+-----------+
rows in set (0.00 sec)

10.使用mysql-bin.000022.sql文件恢复备份时刻到删除数据库之间新增的数据

[root@cjw_jdy backup]# mysql -uroot -p chenjianwen01 < mysql-bin..sql

11.检查恢复后的数据

mysql> select * from userinfo;
+----------+---------------+-----------+
| fuser_id | fuser_name | fuser_age |
+----------+---------------+-----------+
| | chenjianwen02 | |
| | 陈建文 | |
| | chenjianwen03 | |
| | chenjianwen04 | |
| | chenjianwen05 | |
+----------+---------------+-----------+
rows in set (0.00 sec)

mysql数据库增量数据恢复的实例过程【Good job】

mysql数据安全一之数据恢复案例的更多相关文章

  1. MySQL 之数据库增量数据恢复案例

    MySQL 数据库增量数据恢复案例 一.场景概述 MySQL数据库每日零点自动全备 某天上午10点,小明莫名其妙地drop了一个数据库 我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢 ...

  2. MySQL 数据库增量数据恢复案例

    MySQL 数据库增量数据恢复案例 一.场景概述 MySQL数据库每日零点自动全备 某天上午10点,小明莫名其妙地drop了一个数据库 我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢 ...

  3. MySQL中truncate误操作后的数据恢复案例

    MySQL中truncate误操作后的数据恢复案例 这篇文章主要介绍了MySQL中truncate误操作后的数据恢复案例,主要是要从日志中定位到truncate操作的地方然后备份之前丢失的数据,需要的 ...

  4. mysql数据安全之利用二进制日志mysqlbinlog备份数据

    mysql数据安全之利用二进制日志mysqlbinlog备份数据 简介:如何利用二进制日志来备份数据 什么是二进制日志: 二进制日志就是记录着mysql数据库中的一些写入性操作,比如一些增删改,但是, ...

  5. 阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例

    阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例 阿里云技术支持:完颜镇江 问题现象: 磁盘空间满了,第一想到的就是删除无用的服务日志或者升级数据盘. 通常是使用du –sh去分析目录 ...

  6. mysql 启动失败,数据恢复

    mysql 启动失败,数据恢复 2017年02月13日 16:46:36 阅读数:621 Forcing InnoDB Recovery提供了6个等级的修复模式,需要注意的是值大于3的时候,会对数据文 ...

  7. mysql的binlog进行数据恢复

    什么是binlog? binlog,也称为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中,可以用来查看数据库的变更历史(具体的时间点所有的SQL操作).数据库增量备 ...

  8. mysql利用binlog进行数据恢复

    目录 mysql利用binlog进行数据恢复 binlog基本配置和格式 binlog基本配置 查看binlog状态 binlog的三种格式 转换成sql mysql自带的mysqlbinlog 利用 ...

  9. MySQL 误操作后数据恢复(update,delete忘加where条件)【转】

    在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句 写的有问题导致服务器出问题,导致资源耗尽.最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新,这是作为运维或者 ...

随机推荐

  1. css 发光样式

    结果: css/style1.css: /*setup*/ *{ margin:; padding:; } @font-face { font-family: 'Monoton'; font-styl ...

  2. Machine Learning|Andrew Ng|Coursera 吴恩达机器学习笔记(完结)

    Week 1: Machine Learning: A computer program is said to learn from experience E with respect to some ...

  3. python最重要的模块logging

    logging模块 这个模块是目前最重要的模块!!!我一定给讲透彻一点 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python中的loggi ...

  4. OPEN(SAP) UI5 学习入门系列之一:扫盲与热身(上)

    什么是SAP Fiori? 了解SAP UI5必须要从SAP Fiori开始,两者概念经常被混淆,而两者也确实有着非常紧密的关系. 用过SAP的同学们都对SAP的传统的界面(SAP GUI)表示“呵呵 ...

  5. Android 4.0 Camera架构分析之Camera初始化

    Android Camera 采用C/S架构,client 与server两个独立的线程之间使用Binder通信,这已经是众所周知的了.这里将介绍Camera从设备开机,到进入相机应用是如何完成初始化 ...

  6. sysbench工具使用

    --------------需要的软件包-------------- automake libtool sysbench-1.0.zip --------------安装-------------- ...

  7. 新手向——关于Python3.5在Windows 10 系统下发布模块的终极讲解

    博主自己在发布Python模块的时候也是摸索了好久啊,因为跟着书上写的步骤一步一步来终究会跪的节奏有木有啊!!!几经波折终于搞出来了,贴下来与诸君共勉.之前的步骤相信大家都已经知道了,那我们就直接跳过 ...

  8. BZOJ2824 AHOI2012 铁盘整理 【IDA*】

    BZOJ2824 AHOI2012 铁盘整理 Description 在训练中,一些臂力训练器材是少不了的,小龙在练习的时候发现举重器械上的铁盘放置的非常混乱,并没有按照从轻到重的顺序摆放,这样非常不 ...

  9. JavaScript中字符串截取函数slice()、substring()、substr()

    在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与区别吧 ...

  10. 《DSP using MATLAB》示例Example 8.15