標籤:
快照備份原理(從其他部落格看的):
原理:通過lvm快照給lvm真身拍個照片,當lvm真身發送改變時,lvm快照把lvm真身改變之前的內容存放在快照上,這樣在lvm快照有效這段時間內,我們看到的lvm快照上的內容始終是lvm真身在建立lvm快照時內容,通過備份lvm快照即可達到線上備份lvm真身的目的。需要注意的是,當lvm快照比lvm真身小時,若lvm真身發生的改變大於lvm快照,則lvm快照將變得無法讀取而失效; 若lvm快照大於等於lvm真身,則不會發生前面的情況。
當一個snapshot建立的時候,僅拷貝原始卷裡資料的中繼資料(meta- data)。建立的時候,並不會有資料的物理拷貝,因此snapshot的建立幾乎是即時的,當原始卷上有寫操作執行時,snapshot跟蹤原始卷塊的改變,這個時候原始卷上將要改變的資料在改變之前被拷貝到snapshot預留的空間裡,因此這個原理的實現叫做寫時複製(copy-on- write)。
在寫操作寫入塊之前,CoW將未經處理資料移動到snapshot空間裡,這樣就保證了所有的資料在snapshot建立時保持一致。而對於snapshot的讀操作,如果是讀取資料區塊是沒有修改過的,那麼會將讀操作直接重新導向到原始卷上,如果是要讀取已經修改過的塊,那麼就讀取拷貝到snapshot中的塊。
lvm快照備份幾乎熱備:
前提:
1、資料檔案要在邏輯卷上;
2、此邏輯卷所在卷組必須有足夠空間使用快照卷;
3、資料檔案和交易記錄要在同一個邏輯卷上;
[[email protected] mydata]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root 4.0G 3.7G 125M 97% /tmpfs 935M 0 935M 0% /dev/shm/dev/sda1 485M 39M 421M 9% /boot/dev/mapper/myvg-mylv 886M 151M 691M 18% /mydata //這是mysql資料庫檔案和二進位記錄檔還有151M可用空間[[email protected] mydata]#
過程:
1.給mysql表加鎖
mysql> flush tables with read lock; Query OK, 0 rows affected (0.00 sec)
2、通過另一個終端,儲存二進位記錄檔及相關位置資訊;
[[email protected] mydata]# mysql -e ‘show master status\G‘>/backup/master.info*************************** 1. row *************************** File: mysql-bin.000030 Position: 472 Binlog_Do_DB: Binlog_Ignore_DB:
3、給/mydata建立快照卷,名字為back_test
[[email protected] mydata]# lvcreate -L 30M -s -n back_test /dev/mapper/myvg-mylv Rounding up size to full physical extent 32.00 MiB Logical volume "back_test" created
4、釋放鎖,插入資料
mysql> insert into student (name) value (‘david‘);ERROR 1223 (HY000): Can‘t execute the query because you have a conflicting read lockmysql> unlock tables;Query OK, 0 rows affected (0.00 sec)mysql> insert into student (name) value (‘david2‘);Query OK, 1 row affected, 1 warning (0.00 sec)mysql> insert into student (name) value (‘david3‘);Query OK, 1 row affected, 1 warning (0.00 sec)mysql> commit -> ;Query OK, 0 rows affected (0.05 sec)
5、掛載快照卷,備份,刪除快照卷
[[email protected] mydata]# mount -r /dev/myvg/back_test /mnt/[[email protected] mnt]# cp -rfia ./* /tmp/
[[email protected] /]# lvremove /dev/myvg/back_test
Do you really want to remove active logical volume back_test? [y/n]: y
Logical volume "back_test" successfully removed
[[email protected] /]#
6、增量備份二進位日誌,如果有多個事務可以根據472對應的時間點來備份
[[email protected] mydata]# mysqlbinlog --start-position=472 mysql-bin.000030 mysql-bin.000031 >/root/lv_back.sql
//根據時間點備份多個事務,注意時間格式
[[email protected] mydata]# mysqlbinlog --start-time=‘2015-08-06 17:32:08‘ mysql-bin.000030 mysql-bin.000031 >/root/lv_back.sql
7.類比mysql損壞
[[email protected] /]# rm /mydata/* -rf
[[email protected] /]# service mysqld stop
MySQL server PID file could not be found! [FAILED]
8.恢複
可以不複製二進位日誌,可以把二進位日誌刪除
[[email protected] mydata]# cp -riaf /tmp/* /mydata/ //將檔案複製到mysql的資料檔案位置chown -R mysql:mysql /mydata/* //如果/mydata下的屬主不是 mysql許可權,需要修改為mysql許可權 mysql>set sql_log_bin=0 //根據情況看是否關閉 mysql> \. /root/lv_back.sql //還原二進位日誌事務
查看熱備後執行的事務是否恢複
mysql> select * from student;
+----+--------+-----+------+
| id | name | age | Cid |
+----+--------+-----+------+
| 1 | sean | 22 | 6 |
| 5 | alice | 0 | NULL |
| 6 | tom | 0 | NULL |
| 7 | david2 | 0 | NULL |
| 8 | david3 | 0 | NULL |
+----+--------+-----+------+
lvm快照備份mysql