在平常運維工做中,對於mysql數據庫的備份是相當重要的!數據庫對於網站的重要性使得咱們對mysql數據的管理不容有失!
而後,是人總不免會犯錯誤,說不定哪天大腦短路了來個誤操做把數據庫給刪除了,怎麼辦???
下面,就mysql數據庫誤刪除後的恢復方案進行說明。
1、工做場景
(1)MySQL數據庫每晚12:00自動徹底備份。
(2)某天早上上班,9點的時候,一同事犯暈drop了一個數據庫!
(3)須要緊急恢復!可利用備份的數據文件以及增量的binlog文件進行數據恢復。
2、數據恢復思路
(1)利用全備的sql文件中記錄的CHANGE MASTER語句,binlog文件及其位置點信息,找出binlog文件中增量的那部分。
(2)用mysqlbinlog命令將上述的binlog文件導出爲sql文件,並剔除其中的drop語句。
(3)經過全備文件和增量binlog文件的導出sql文件,就能夠恢復到完整的數據。
3、實例說明python
在/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>