使用lvm-snapshot備份mysql資料庫,lvm-snapshotmysql
前提要求:
交易記錄跟資料檔案必須在同一個卷上;
建立快照卷之前,要請求MySQL的全域鎖;在快照建立完成之後手動釋放鎖;
請求全域鎖完成之後,做一次日誌滾動;做二進位記錄檔及位置標記(手動進行);
1、為資料施加讀鎖,滾動二進位記錄檔並記錄當前二進位檔案起始時間段:
2、做快照;
3、釋放讀鎖:
4、掛載快照,將快照裡面的資料複製出來,並刪除快照:
[root@localhost mydata]# mount /dev/VG/mysql /mnt/ -o ro
[root@localhost mydata]# mkdir /mysqlback
[root@localhost mydata]# cp -a /mnt/ /mysqlback/20141121
[root@localhost mydata]# umount /mnt/
[root@localhost mydata]# lvremove /dev/VG/mysql
Do you really want to remove active logical volume mysql? [y/n]: y
Logical volume "mysql" successfully removed
5、向一個表插入資料是資料發生改變,要在最後使用二進位日誌恢複此資訊。
mysql> INSERT INTo newtb values('jack');
Query OK, 1 row affected (0.01 sec)
mysql> select * from newtb;
+------+
| Name |
+------+
| tom |
| jack |
+------+
2 rows in set (0.00 sec)
6、結合之前記錄的二進位日誌開始時間匯出成一個檔案
[root@localhost mydata]# mysqlbinlog --start-position=107 mysql-bin.000011 > /tmp/20141121.sql
7、將資料庫停止,刪除資料,嘗試恢複資料
8、啟動mysql服務並查看資料是否恢複:
9、使用二進位日誌恢複後來建立的使用者:
mysql> source /tmp/20141121.sql;
總結:
備份過程:
1、對MySQL資料庫了施加讀鎖,防止在備份過程中有使用者插入資料而導致備份後的資料不一致
2、復原日誌,使目前狀態的資料做一個完整的備份,之後的資料用二進位日誌恢複
3、使用SHOW MASTER STATUS命令記錄日誌的開始時間
4、使用lvcreate命令對lv做快照
5、去除讀鎖
恢複過程:
6、將建立好的lv快照掛載到目錄,並將裡面的資料複製出來
7、卸載快照、再刪除快照
8、將從快照式複寫出來的資料複製到/data/mydata
9、使用mysqlbinlog結合之前記錄的開始時間點匯出需要的位元據為一個xx.sql檔案
10、將sql檔案匯入資料庫即完成整改恢複過程
歡迎大家訪問我的個人網站 萌萌的IT人