1. 程式人生 > >實驗:模擬場景中誤刪除mysql數據庫表,然後使用全備份以及二進制日誌文件恢復操作

實驗:模擬場景中誤刪除mysql數據庫表,然後使用全備份以及二進制日誌文件恢復操作

skip images 目錄 mysqldump 系統 cde tables ransac 環境

一、實驗環境:

1、準備兩臺虛擬機,一臺用於破壞數據庫,一臺用於還原,兩臺在同一個網絡

2、兩臺最小化安裝centos 7系統,並直接yum安裝maraidb數據庫

3、準備一個測試數據庫文件,例如,hellodb_innodb.mysql 測試庫裏面最少有兩個表。

二、實驗步驟:

1、開啟數據庫的二進制日誌功能

vim /etc/my.cnf
[mysqld] 下面加入log-bin 表示開啟二進制日誌功能

技術分享圖片

2、完全備份

mysqldump -A -F --master-data=2 --single-transaction |gzip > /data/all.sql.gz
備份數據庫文件並用gzip壓縮,存放到/data目錄

技術分享圖片

3、直接連接數據庫修改任意表

insert students (name,age)values(‘a‘,20);
insert students (name,age)values(‘b‘,30);

技術分享圖片

select * from students 查詢新加入的表信息

技術分享圖片

4、模擬刪除數據庫表

drop table students;如圖下,已將students表刪除;

技術分享圖片

5、假裝不知道,繼續修改其他表

insert teachers (name,age)values(‘zhangsir‘,30);

技術分享圖片

6、發現重要表刪除,立即鎖表

flush tables with read lock; 給表加上讀鎖

7、在另一臺機子上還原

vim /etc/my.cnf
skip-networking 確保其它用戶不能訪問數據庫,只能自己操作
rm -rf /var/lib/mysql 將原來的數據庫文件刪除,避免原來有文件
scp /data/all.sql.gz 192.168.190.129:/data
將原來備份的文件,復制到現主機的目錄中

8、完全備份還原

gzip -d /data/all.sql.gz 解壓打包的備份文件
mysql < /data/all.sql 將文件導入到數據庫中

技術分享圖片

9、還原增量備份

less /data/all.sql 查看二進制日誌位置

技術分享圖片

確定二進制日誌,以及起始位置為245

scp /var/lib/mysql/mariadb-bin.000002 192.168.190.129:/data
將二進制文件拷貝過來
mysqlbinlog -- start-position=245 /data/mariadb-bin.000002 > /data/binlog.sql
使用mysqlbinlog工具,生成新的二進制日誌

技術分享圖片

vim /data/binlog.sq
找到drop table students; 這條sql語句,註釋有關此行

技術分享圖片

mysql < /data/binlog.sql
導入二進制日誌文件
恢復用戶的訪問

三、檢驗數據的完整性

show databases;
show tables

技術分享圖片

上圖中的students表已經恢復過來

技術分享圖片
技術分享圖片

如圖所示,之前做的修改也都回來了。實驗目的達到了。

四、實驗總結

mariadb 數據庫破壞後,需要借助完全備份+二進制日誌文件進行還原,兩者缺一不可,兩者都非常重要,生產中既要保護好備份的數據庫文件,同時還需要保護好二進制文件,從而保證數據還原的完整性。

實驗:模擬場景中誤刪除mysql數據庫表,然後使用全備份以及二進制日誌文件恢復操作