导读

在日常运维工作中,对于mysql数据库的权限的规避,SQL审核优化、数据备份恢复就变成了,工作必备技能;数据库对于网站的重要性使得我们对mysql数据的管理不容有失。

下面,就mysql数据库误删除后的恢复方案进行说明。

MySQL数据恢复方法总结

1、使用Mysql 数据闪回工具恢复数据的文章:http://blog.51cto.com/qiuyt/2095758

2、今天的主角 【Mysqldump】,原生自带

工作场景

(1)MySQL数据库每晚12:00自动完全备份。

(2)某天早上上班,9点的时候,一同事犯晕drop了一个数据库!

(3)需要紧急恢复!可利用备份的数据文件以及增量的binlog文件进行数据恢复。

数据恢复思路

(1)利用全备的sql文件中记录的CHANGE MASTER语句,binlog文件及其位置点信息,找出binlog文件中增量的那部分。

(2)用mysqlbinlog命令将上述的binlog文件导出为sql文件,并剔除其中的drop语句。

(3)通过全备文件和增量binlog文件的导出sql文件,就可以恢复到完整的数据。

四、实例说明

首先,要确保mysql开启了binlog日志功能,在/etc/my.cnf文件里的[mysqld]区块添加:

log-bin=mysql-bin

然后重启mysql服务

在ops库下创建一张表customers

mysql> use ops;

mysql> create table customers(

-> id int not null auto_increment,

-> name char(20) not null,

-> age int not null,

-> primary key(id)

-> )engine=InnoDB;

Query OK, 0 rows affected (0.09 sec)

mysql> show tables;

+---------------+

| Tables_in_ops |

+---------------+

| customers |

+---------------+

1 row in set (0.00 sec)

mysql> desc customers;

+-------+----------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+----------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| name | char(20) | NO | | NULL | |

| age | int(11) | NO | | NULL | |

+-------+----------+------+-----+---------+----------------+

3 rows in set (0.02 sec)

mysql> insert into customers values(1,"wangbo","24");

Query OK, 1 row affected (0.06 sec)

mysql> insert into customers values(2,"guohui","22");

Query OK, 1 row affected (0.06 sec)

mysql> insert into customers values(3,"zhangheng","27");

Query OK, 1 row affected (0.09 sec)

mysql> select * from customers;

+----+-----------+-----+

| id | name | age |

+----+-----------+-----+

| 1 | wangbo | 24 |

| 2 | guohui | 22 |

| 3 | zhangheng | 27 |

+----+-----------+-----+

3 rows in set (0.00 sec)

现在进行全备份

[root@vm-002 ~]# mysqldump -uroot -p -B -F -R -x --master-data=2 ops|gzip >/opt/backup/ops_$(date +%F).sql.gz

Enter password:

[root@vm-002 ~]# ls /opt/backup/

ops_2018-07-03.sql.gz

参数说明:

-B:指定数据库(备份中带有创库语句)

-F:刷新日志

-R:备份存储过程等

-x:锁表 (锁表过程会造成业务无法读写,可能会出现502)

--master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息

再次插入数据

mysql> insert into customers values(4,"liupeng","21");

Query OK, 1 row affected (0.06 sec)

mysql> insert into customers values(5,"xiaoda","31");

Query OK, 1 row affected (0.07 sec)

mysql> insert into customers values(6,"fuaiai","26");

Query OK, 1 row affected (0.06 sec)

mysql> select * from customers;

+----+-----------+-----+

| id | name | age |

+----+-----------+-----+

| 1 | wangbo | 24 |

| 2 | guohui | 22 |

| 3 | zhangheng | 27 |

| 4 | liupeng | 21 |

| 5 | xiaoda | 31 |

| 6 | fuaiai | 26 |

+----+-----------+-----+

6 rows in set (0.00 sec)

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

mysql> drop database ops;

Query OK, 1 row affected (0.04 sec)

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

查看全备之后新增的binlog文件

[root@vm-002 ~]# cd /opt/backup/

[root@vm-002 backup]# ls

ops_2018-07-03.sql.gz

[root@vm-002 backup]# gzip -d ops_2018-07-03.sql.gz

[root@vm-002 backup]# ls

ops_2018-07-03.sql

[root@vm-002 backup]# grep CHANGE ops_2018-07-03.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=106;

这是全备时刻的binlog文件位置,即mysql-bin.000002的106行,因此在该文件之前的binlog文件中的数据都已经包含在这个全备的sql文件中了

移动binlog文件,并导出为sql文件,剔除其中的drop语句

查看mysql的数据存放目录,由下面可知是在/var/lib/mysql下

[root@vm-002 backup]# ps -ef|grep mysql

root 9272 1 0 01:43 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql

mysql 9377 9272 0 01:43 pts/1 00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

[root@vm-002 backup]# cd /var/lib/mysql/

[root@vm-002 mysql]# ls

ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.index mysql.sock test

[root@vm-002 mysql]# cp mysql-bin.000002 /opt/backup/

将binlog文件导出sql文件,并vim编辑它删除其中的drop语句

[root@vm-002 backup]# mysqlbinlog -d ops mysql-bin.000002 >002bin.sql

[root@vm-002 backup]# ls

002bin.sql mysql-bin.000002 ops_2018-07-03.sql

[root@vm-002 backup]# vim 002bin.sql #删除里面的drop语句

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

恢复数据

[root@vm-002 backup]# mysql -uroot -p < ops_2018-07-03.sql

Enter password:

[root@vm-002 backup]#

检查“全备” 是否恢复成功

查看数据库,看看ops库在不在

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| ops |

| test |

+--------------------+

4 rows in set (0.00 sec)

mysql> use ops;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from customers;

+----+-----------+-----+

| id | name | age |

+----+-----------+-----+

| 1 | wangbo | 0 |

| 2 | guohui | 0 |

| 3 | zhangheng | 0 |

+----+-----------+-----+

3 rows in set (0.00 sec)

此时恢复了全备时刻的数据;接着,使用002bin.sql文件恢复全备时刻到删除数据库之间,新增的数据

[root@vm-002 backup]# mysql -uroot -p ops <002bin.sql

Enter password:

[root@vm-002 backup]#

再次查看数据库,发现全备份到删除数据库之间的那部分数据也恢复了!!

mysql> select * from customers;

+----+-----------+-----+

| id | name | age |

+----+-----------+-----+

| 1 | wangbo | 24 |

| 2 | guohui | 22 |

| 3 | zhangheng | 27 |

| 4 | liupeng | 21 |

| 5 | xiaoda | 31 |

| 6 | fuaiai | 26 |

+----+-----------+-----+

6 rows in set (0.00 sec)

以上就是mysql数据库增量数据恢复的实例过程!

总结几点

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

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

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

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

linux mysql 数据恢复_怎样恢复Mysql数据库误删除后的数据相关推荐

  1. 华信mysql数据恢复_华信Mysql数据库修复工具1.0

    华信Mysql数据库修复程序是由北京华信数据恢复中心独立研发,主要针对Mysql数据库损坏的恢复.本程序可用于由于各种误操作而导致数据丢失的恢复,以及由于断电.陈列损坏.硬盘坏道等各种原因导致数据库无 ...

  2. 电脑坏了怎么把硬盘的mysql数据恢复_硬盘恢复数据技巧:硬盘坏了数据可以恢复吗?...

    一.硬盘格式化数据恢复方法 第一步:首先我们需要一些工具类软件来协助我们恢复数据.打开浏览器搜索"嗨格式数据恢复大师",下载软件并安装: 第二步:安装完成后打开软件,按照软件的选项 ...

  3. mysql数据库误删后能恢复吗_MySQL 数据库误删除后的数据恢复

    MySQL 数据库误删除后的数据恢复 MySQL 数据库误删除后的数据恢复 在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失! 然而是 ...

  4. 误删阿里云mysql恢复数据恢复_mysql数据库误删除后的数据恢复操作说明-阿里云开发者社区...

    在日常运维工作中,对于mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失! 然后,是人总难免会犯错误,说不定哪天大脑短路了来个误操作把数据库给删除了,怎么 ...

  5. MySQL 数据库误删除后的数据恢复操作说明

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景: 每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备 ...

  6. mysql数据库恢复操作_MySQL 数据库误删后的数据该如何恢复操作?

    原标题:MySQL 数据库误删后的数据该如何恢复操作? 纯手工打造每一篇开源资讯与技术干货,数十万程序员和Linuxer已经关注. 在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要 ...

  7. 关于mysql数据库误删除后的数据恢复操作说明

    在日常运维工作中,对于mysql数据库mysql数据库mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失! 然后,是人总难免会犯错误,说不定哪天大脑短路了 ...

  8. 360误删mysql_MySQL 数据库误删除后的数据恢复操作说明

    在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失!然而是人总难免会犯错误,说不定哪天大脑短路了,误操作把数据库给删除了,怎么办? 下面 ...

  9. mysql 日志文件 自动_自动恢复MySQL数据库的日志文件思路分享及解决方案

    如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据."mysqlbinlog:用 ...

  10. mysql猎豹_猎豹网校MySQL数据库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 猎豹网校MySQL数据库 链接:http://pan.baidu.com/s/1i3wyPjn 密码:qxhm 教程目录 第1章 了解SQL 1.1 数据 ...

最新文章

  1. 科大讯飞刘庆峰发表对未来10年AI三大判断
  2. 【分组背包问题 (HDU 3535 )】
  3. 【PP生产订单】入门介绍(十二)
  4. golang修改文件的最后访问时间,最后修改时间
  5. LeetCode 1243. 数组变换
  6. 将本地源代码程序推送远程Github仓库
  7. ORACLE sid,pid,spid总结
  8. pandas——pd.DataFrame.iloc()
  9. jQuery Form Plugin (二) :使用AJAX提交Form表单
  10. ECharts制作报表模板
  11. 数学建模matlab画图操作大全
  12. Word插入图目录,表目录
  13. amigo幸运字符什么意思_超不清视频播放器-用Python将视频转成字符
  14. 软件工程——软件总体设计
  15. GNSS连续运行单参考站解决方案
  16. 莫比乌斯反演公式推导
  17. 什么是亚稳态,如何消除?
  18. java castor_Castor以及Java和XML数据绑定
  19. 一文看懂三极管的截止、饱和
  20. react学习笔记(完整版 7万字超详细)

热门文章

  1. 安全运营SOC Security Operations Center
  2. linux 下查看文件字符编码和转换编码 360doc,Linux 下查看文件字符编码和转换编码...
  3. aspectjweaver:关于Spring注解AOP的注意点
  4. 转载:大师之间的论战 jQuery之父谈YUI3差在哪
  5. ssm+爱尚购物 毕业设计-附源码211622
  6. MIUI ROM for Milestone 刷机教程
  7. Delphi D10.X VCL和FireMonkey之间的常见差异介绍
  8. mysql-入门教程
  9. 你就是北上广深的树先生
  10. python爬虫小说实例源码_Python下载网络小说实例代码