在日常运维工作中,对于mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失!
然后,是人总难免会犯错误,说不定哪天大脑短路了来个误操作把数据库给删除了,怎么办???
下面,就mysql数据库误删除后的恢复方案进行说明。
一、工作场景
(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服务
----------------------------------------
(1)在RUNOOB库下创建一张表runoob_tbl
mysql> create DATABASE RUNOOB;
Query OK, 1 row affected (0.01 sec)
mysql> use RUNOOB;
Database changed
mysql> CREATE TABLE IF NOT EXISTS `runoob_tbl`(
-> `runoob_id` INT UNSIGNED AUTO_INCREMENT,
-> `runoob_title` VARCHAR(100) NOT NULL,
-> `runoob_author` VARCHAR(40) NOT NULL,
-> `submission_date` DATE,
-> PRIMARY KEY ( `runoob_id` )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> desc runoob_tbl;
+-----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+---------+----------------+
| runoob_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| runoob_title | varchar(100) | NO | | NULL | |
| runoob_author | varchar(40) | NO | | NULL | |
| submission_date | date | YES | | NULL | |
+-----------------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
在数据表插入数据:
mysql> INSERT INTO runoob_tbl
-> VALUES
-> (0, "JAVA ", "RUNOOB.COM", '2016-05-06');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO runoob_tbl VALUES (0, "PHP ", "RUNOOB.COM", '2017-05-06');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO runoob_tbl VALUES (0, "Ruby ", "RUNOOB.COM", '2019-05-06');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO runoob_tbl VALUES (0, "Ruby ", "RUNOOB.COM", '2019-05-06');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO runoob_tbl VALUES (0, "Ruby ", "RUNOOB.COM", '2019-05-06'