LVM快照備份原理圖mysql
2.1 LVM: 幾乎熱備、物理備份,加讀鎖,直接備份原卷,那麼你就得等備份操做完成後才能解鎖.sql
2.2而LVM快照就是備份完成就能夠解鎖,速度極快,這就是爲何是幾乎熱備的緣由數據庫
2.3前提:innoDB引擎的事務日誌必須跟數據文件在同一個LV捲上;ibdata1 ib_logfile0 ib_logfile1若分開則建立快照時間點不一致,備份數據不一致,建立備份無心義。快照只能對邏輯卷LVM進行備份,而且只能對同一個卷組的邏輯捲進行備份。innoDB最好每表一空間緩存
備份操做步驟:app
1.創建lvm卷組myvg-mydata,掛載到/mydata/data下ide
[root@station253 ~]# lvcreate -L 2G -n mydata /dev/mapper/myvg-mydataspa
Logical volume "mydata" created日誌
2.初始化Mysql將數據目錄指向/mydata/data並創建數據庫blog
3.同步日誌並加讀鎖,不要關閉終端,不然鎖將失效,滾動日誌事務
mysql> SET sync_binlog=1; 未提交事務日誌馬上寫入文件
mysql> SET sql_log_bin=0; 關閉二進制日誌
mysql> FLUSH TABLES WITH READ LOCK; 全部表加讀鎖
mysql> SHOW MASTER STATUS;
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
| mysql-bin.000002 | 1473 | | |
4. 新建終端爲數據所在的卷建立快照:目的卷大小爲原卷2倍,目標卷與原卷在同一卷組上;mysqldump是重讀sql文件重執行極慢,lvm snap是在底層文件系統級別複製塊,速度極快;
[root@station253 ~]# lvcreate -L 4G -n mydata-snap -p r -s /dev/mapper/myvg-mydata
Logical volume "mydata-snap" created
5.迅速釋放讀鎖
mysql> UNLOCK TABLES;
6.掛載快照,拷備出來,卸載快照,刪除快照
[root@station253 ~]# mount /dev/mapper/myvg-mydata-snap /snap
[root@station253 ~]# cp -aR /snap/* /backup
[root@station253 ~]# umount /snap
[root@station253 ~]# lvremove/dev/mapper/myvg-mydata-snap
7.模擬數據庫崩潰,注意快照回來修正數據庫屬組屬主,不然mysqld沒法啓動
[root@station253 ~]# servivce mysqld stop
[root@station253 ~]# rm -R /mydata/data/*
[root@station253 ~]# cp -aR /backup /* /mydata/data
[root@station253 ~]# chown -R mysql.mysql /mydata/data
[root@station253 ~]# servivce mysqld start
8. 恢復後馬上重作未提交事務,打開二進制日誌
mysql> SHOW MASTER STATUS;
mysql> SET sync_binlog=1; 未提交事務日誌馬上寫入文件
mysql> SET sql_log_bin=1;
mysql> SHOW MASTER STATUS;
恢復時需注意問題:innodb引擎啓動數據庫時,由於有buffer pool緩存存在會對未提交事務回滾、已提交的事務同步到磁盤文件,有崩潰恢復過程。