您好,登錄后才能下訂單哦!
下文主要給大家?guī)聿僮?a title="MySQL" target="_blank" href="http://kemok4.com/mysql/">MySQL誤刪數(shù)據(jù)庫備份該如何恢復(fù),希望這些內(nèi)容能夠帶給大家實際用處,這也是我編輯操作MySQL誤刪數(shù)據(jù)庫備份該如何恢復(fù)這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
案例:2013年6月1日,上午10點左右某網(wǎng)站的數(shù)據(jù)庫被誤刪除,導(dǎo)致網(wǎng)站無法訪問,由于數(shù)據(jù)庫已經(jīng)備份了6月1日凌晨0點之前的數(shù)據(jù),但是0點之后到10點左右的數(shù)據(jù)就沒有備份數(shù)據(jù),那么要求你將數(shù)據(jù)庫中的所有數(shù)據(jù)進行恢復(fù)。
一:數(shù)據(jù)記錄介紹
6月1日0點之前的數(shù)據(jù)為
| 1 | oldboy | | 2 | oldgirl | | 3 | inca | | 4 | zuma | | 5 | kaka | # 6月1日0點之后到10點左右寫入的數(shù)據(jù)為 | 6 | oldgirl | | 7 | test | | 8 | laowang |
二:模擬事故的發(fā)生準(zhǔn)備
1.為了不影響本次實驗,我們先將系統(tǒng)的定時任務(wù)。
[root@db01 ~]# crontab -l #*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
2.先將使用時間調(diào)整至凌晨0點,每天00點進行數(shù)據(jù)庫備份
[root@db01 backup]# date -s "2013/06/01" Mon Aug 29 00:00:00 CST 2016
3.先檢查數(shù)據(jù)庫有哪些數(shù)據(jù)
[root@db01 ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock mysql> use oldboy;
創(chuàng)建一個test表測試
CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY(`id`) );
向表中插入數(shù)據(jù)
insert into test values (1,'oldboy'),(2,'oldgirl'),(3,'inca'),(4,'zuma'),(5,'kaka'); mysql> select * from test; +----+---------+ | id | name | +----+---------+ | 1 | oldboy | | 2 | oldgirl | | 3 | inca | | 4 | zuma | | 5 | kaka | +----+---------+ 5 rows in set (0.00 sec)
4.首先對oldboy數(shù)據(jù)庫進行全量備份
下面的參數(shù)--master-data=2需要開啟binlog日志
[root@db02 ~]# mysqldump -uroot -poldboy123 -S /data/3306/mysql.sock -B -F -x --master-data=2 oldboy|gzip >/server/backup/oldboy_$(date +%F).sql.gz #<== -x 表示備份數(shù)據(jù)庫鎖表
檢查新生產(chǎn)的binlog日志
[root@db02 ~]# ll /data/3306/ -rw-rw---- 1 mysql mysql 107 Jun 1 00:02 mysql-bin.000070
5.檢查數(shù)據(jù)庫是否備份成功
[root@db01 ~]# ll /server/backup/ -rw-r--r-- 1 root root 872 Jun 1 00:02 oldboy_2013-06-01.sql.gz
6.然后望數(shù)據(jù)庫寫入一些數(shù)據(jù),模擬備份完成以后數(shù)據(jù)庫還依舊在寫入數(shù)據(jù)
[root@db02 ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock mysql> use oldboy; mysql> insert into test values(6,'oldgirl'),(7,'test'),(8,'laowang'); mysql> select * from test; +----+---------+ | id | name | +----+---------+ | 1 | oldboy | | 2 | oldgirl | | 3 | inca | | 4 | zuma | | 5 | kaka | | 6 | oldgirl | | 7 | test | | 8 | laowang | +----+---------+ 8 rows in set (0.00 sec)
三:制造故障發(fā)生
假設(shè)上午10點:
出事了,
某個領(lǐng)導(dǎo),誤刪了數(shù)據(jù)庫oldboy
7.現(xiàn)在模擬早上10點發(fā)生故障,數(shù)據(jù)庫oldboy被刪除,先修改時間
[root@db02 ~]# date -s "10:00:00" Mon Aug 29 10:00:00 CST 2016 [root@db02 ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "drop database oldboy;" Query OK, 1 row affected, 1 warning (0.01 sec)
#檢查數(shù)據(jù)庫是否刪除成功
mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "show databases;"
四:解決問題,恢復(fù)數(shù)據(jù)
10:10分,運維人員,網(wǎng)站客戶,發(fā)現(xiàn)問題,找到開發(fā)或運維
最后確定問題,網(wǎng)站的數(shù)據(jù)庫連接不上,報錯。登錄數(shù)據(jù)庫發(fā)生數(shù)據(jù)庫不存在啦
8.現(xiàn)在我們來解決問題,恢復(fù)數(shù)據(jù)庫
首先我們需要知道備份以后產(chǎn)生的binlog日志,可以通過備份的時間判斷。
[root@db02 ~]# ll /data/3306/ -rw-rw---- 1 mysql mysql 107 Jun 1 00:02 mysql-bin.000070
9.如果看不出來的話,看備份文件的信息,
[root@db02 ~]# cd /server/backup/ [root@db02 backup]# gzip -d oldboy_2013-06-01.sql.gz [root@db02 backup]# grep "CHANGE" oldboy_2013-06-01.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000070', MASTER_LOG_POS=107
10.先將mysql-bin.000070的binlog日志進行備份
[root@db02 ~]# cp /data/3306/mysql-bin.000070 /server/backup/ [root@db02 ~]# ll /server/backup/ total 8 -rw-r----- 1 root root 415 Jun 1 10:04 mysql-bin.000070 #<== 增量備份文件 -rw-r--r-- 1 root root 2203 Jun 1 00:02 oldboy_2013-06-01.sql #<== 全量備份文件
11.根據(jù)上面的情況,我們已經(jīng)準(zhǔn)備好了全量備份加增量備份的數(shù)據(jù),現(xiàn)在就可以恢復(fù)
我們的目的,
(1)恢復(fù)00點之前的全量備份(5條數(shù)據(jù))
[root@db02 ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock </server/backup/oldboy_2013-06-01.sql [root@db02 backup]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "use oldboy;select * from test;" +----+---------+ | id | name | +----+---------+ | 1 | oldboy | | 2 | oldgirl | | 3 | inca | | 4 | zuma | | 5 | kaka | +----+---------+
12恢復(fù)00點到10點的增量備份(2條數(shù)據(jù))
[root@db02 ~]# cd /server/backup/ [root@db02 backup]# mysqlbinlog -d oldboy mysql-bin.000070 >zengliang.sql
13先找到binlog日志的drop語句刪除,然后在恢復(fù)binglog日志的增量備份
[root@db02 backup]# vim zengliang.sql drop database oldboy #<== 刪除此行
14.現(xiàn)在將數(shù)據(jù)庫的增量備份文件恢復(fù)到數(shù)據(jù)庫
[root@db02 backup]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock </server/backup/zengliang.sql
15只要能恢復(fù)到以下的數(shù)據(jù),就表示數(shù)據(jù)恢復(fù)成功
[root@db01 backup]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e 'select * from oldboy.test;' +----+---------+ | id | name | +----+---------+ | 1 | oldboy | | 2 | oldgirl | | 3 | inca | | 4 | zuma | | 5 | kaka | | 6 | oldgirl | | 7 | test | | 8 | laowang | +----+---------+
對于以上關(guān)于操作MySQL誤刪數(shù)據(jù)庫備份該如何恢復(fù),大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會喜歡上這些內(nèi)容的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。