企業案例(二):增量恢復案例
阿新 • • 發佈:2018-03-21
new img master 技術 2.3 分鐘 cti binlog日誌 誤刪數據
1、環境準備
條件:
1.具備全量備份(mysqldump)。
2.除全量備份以外,還有全量備份之後產生的的所有binlog增量日誌。
1.1、建立數據庫和表
CREATE DATABASE dadong; USE `dadong`; CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; INSERT INTO `test` VALUES (1,‘dadong‘),(2,‘he‘),(3,‘inca‘),(4,‘zuma‘),(5,‘kaka‘);
1.2、建立備份目錄
準備環境: mkdir /data/backup -p date -s "2017/06/22"
1.3、備份數據庫
mysqldump -B --master-data=2 --single-transaction dadong|gzip>/data/backup/dadong_$(date +%F).sql.gz 備份數據庫後插入幾行數據。模擬沒有備份全備,但是binlog存在記錄時,恢復數據。 mysql -e "use dadong;insert into test values(6,‘bingbing‘);" mysql -e "use dadong;insert into test values(7,‘xiaoting‘);" mysql -e "select * from dadong.test;"
1.4、 模擬誤刪數據
date -s "2017/06/22 11:40" mysql -e "drop database dadong;show databases;" 出現問題10分鐘後,發現問題,刪除了數據庫了.
2、開始恢復準備
2.1、采用iptables防火墻屏蔽所有應用程序的寫入
[root@dadong ~]# iptables -I INPUT -p tcp --dport 3306! -s 172.16.1.51 -j DROP #<==非172.16.1.51禁止訪問數據庫3306端口。
註:此步操作目的是停止客戶數據的寫入,而並不是停止數據庫
2.2、 操作前備份
cp -a /application/mysql/logs/dadong-bin.* /data/backup/
2.3、準備全量和增量備份文件
1.dadong_2017-06-22.sql(全量) 2.bin.sql(增量)
3、恢復過程
3.1、 恢復全備
[root@db02 backup]#zcat dadong_2017-06-22.sql.gz >dadong_2017-06-22.sql ###解壓全備文件 [root@db02 backup]# mysql <dadong_2017-06-22.sql [root@db02 backup]# mysql -e "show databases;" +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | dadong | | he | | performance_schema | +--------------------+ [root@db02 backup]# mysql -e "use dadong;select * from test;" +----+---------+ | id | name | +----+---------+ | 1 | dadong | | 2 | he | | 3 | inca | | 4 | zuma | | 5 | kaka | +----+---------+
3.2、恢復增量
———————————以下正式恢復操作—————————————— [root@db02 backup]#sed -n ‘22p‘ dadong_2017-06-22.sql ###獲取binlog日誌的起始地址339 [root@db02 backup]#mysqlbinlog -d dadong --start-position=339 dadong-bin.0000012 -r bin.sql ##”-d” 指定查看哪個庫;”-r” 指定binlog日誌存放在哪個文件中。 [root@db02 backup]#grep -i drop bin.sql [root@db02 backup]#sed -i ‘/^drop.*/d‘ bin.sql ###刪除刪庫語句,防止恢復後又執行drop語句。 [root@db02 backup]# mysql dadong <bin.sql [root@db02 backup]# mysql -e "use dadong;select * from test;" +----+----------+ | id | name | +----+----------+ | 1 | dadong | | 2 | he | | 3 | inca | | 4 | zuma | | 5 | kaka | | 6 | bingbing | | 7 | xiaoting | +----+----------+ ####註釋:mysqlbinlog -d dadong dadong-bin.0000012 -r bin.sql ###其中“dadong-bin.0000012”要根據最後相關操作時間(刪庫時間)來確定drop語句放在哪個binlog文件中,
並且binlog文件是二進制文件,必須使用mysqlbinlog進行操作後才能使用cat查看。
註:此時如果沒有執行sed -i ‘/^drop.*/d‘ bin.sql;就會出現下面錯誤
3.3、 恢復完畢
最後一步特別重要,恢復完畢後,一定要調整iptables允許用戶訪問.
企業案例(二):增量恢復案例