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. Shell 命令行求两个文件每行对比的相同内容

    Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...

  2. java.sql.SQLException: Unsupported character encoding 'utf8mb4'.

    四月 12, 2017 3:47:52 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() fo ...

  3. go语言】Goroutines 并发模式

    并发模式 让我们先来回顾一下boring函数的例子. func boring(msg string, c chan string) {    for i := 0; ; i++ {         c ...

  4. 博通BCM53101M以太网交换芯片原理解析

    Quality of Service 服务质量 BCM53101M的QoS为每个端口提供6个内部队列以支持6种不同的流量类别(traffic class, TC).在流量拥塞的情况下,可通过拥塞管理, ...

  5. 基于 od 窗口的anti

    虽然 odadvance 这类的插件 , 使用驱动将 od 的窗口 进行 隐藏,使用enumwindow ,无法枚举到od的窗口, 但是依然可以 使用r3 的方法 , 对od 窗口检测 之后可以使用 ...

  6. 21天学通C++_Day6

    0.指针&数组 数组是指向其第一个元素的指针,即数组变量就是指针.故可将(*)用于数组,也可将([])用于指针,eg: int MyNums[5] = {0}; int* pNums = My ...

  7. 兼容iOs7的自定义alertView

    转载请注明出处. 升级到ios7后,旧项目中使用的继承UIAlertView的自定义alertview无法正常显示了,无奈只好换思路去实现,改成从当前keywindow下创建要显示的alertview ...

  8. BZOJ3688 折线统计【树状数组优化DP】

    Description 二维平面上有n个点(xi, yi),现在这些点中取若干点构成一个集合S,对它们按照x坐标排序,顺次连接,将会构成一些连续上升.下降的折线,设其数量为f(S).如下图中,1-&g ...

  9. ruby 的数组操作

    转自:http://fujinbing.iteye.com/blog/1126232 1. & [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] # => [1, 3] ...

  10. 使用stsadm.exe工具实现SharePoint网站备份还原

    一.过程描述: 首先在源站点机器上用stsadm.exe备份网站集,讲备份文件拷贝到目标服务器(也可直接在备份时配置备份路径为目标机器路径),然后执行还原操作:首先新建网站集,然后用SharePoin ...