在日常運維工作中,對於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文件,就可以恢復到完整的數據。
三、實例說明
在/etc/my.cnf文件裏的[mysqld]區塊添加:
log-bin=mysql-bin
然後重啓mysql服務
(1)建庫建表
mysql> create database ops;
Query OK, 1 row affected (0.11 sec)
mysql> use ops
Database changed
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.12 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.00 sec)
mysql>
插入數據
mysql> insert into customers values(1,"wangbo",24);
Query OK, 1 row affected (0.03 sec)
mysql> insert into customers values(2,"xiaoli",25);
Query OK, 1 row affected (0.01 sec)
mysql> insert into customers values(3,"lida",26);
Query OK, 1 row affected (0.01 sec)
mysql> select * from customers;
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | wangbo | 24 |
| 2 | xiaoli | 25 |
| 3 | lida | 26 |
+----+--------+-----+
3 rows in set (0.00 sec)
mysql>
(2)進行全備
[root@db02 opt]# mysqldump -B -F -A --master-data=2 >/opt/ops_$(date +%F).sql
(3)在插入數據
mysql> insert into customers values(4,"bapbao",20);
Query OK, 1 row affected (0.00 sec)
mysql> insert into customers values(5,"paoap",20);
Query OK, 1 row affected (0.00 sec)
mysql> insert into customers values(6,"ppoiu",18);
Query OK, 1 row affected (0.01 sec)
mysql> select * from customers;
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | wangbo | 24 |
| 2 | xiaoli | 25 |
| 3 | lida | 26 |
| 4 | bapbao | 20 |
| 5 | paoap | 20 |
| 6 | ppoiu | 18 |
+----+--------+-----+
6 rows in set (0.00 sec)
mysql>
(4)刪除數據庫
mysql> drop database ops;
Query OK, 1 row affected (0.10 sec)
(5)恢復數據庫
mysql> source /opt/ops_2017-12-04.sql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oldboy |
| ops |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)
mysql> select * from ops.customers;
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | wangbo | 24 |
| 2 | xiaoli | 25 |
| 3 | lida | 26 |
+----+--------+-----+
3 rows in set (0.00 sec)
mysql>