MySQL[2] 快照方式備份lvm

MySQL的第一款備份工具mysqldump,咱們在上篇文章中已經和你們聊過,若是你們還有疑惑,請點擊mysqldumpphp

MySQL的第二款備份工具lvm快照,那麼今天咱們就聊聊它lvm快照卷溫備html


mysqldump可以實現對InnoDB存儲引擎實現熱備,可是卻沒法實現對MyISAM引擎進行熱備;java

而今天將要和你們介紹lvm可以實現對MyISAM引擎實現幾乎熱備
python


使用lvm快照進行mysql的備份時,須要知足如下條件:
mysql

  1. 數據文件要在邏輯捲上sql

  2. 此邏輯卷所在卷組必須有足夠空間使用快照卷數據庫

  3. 數據文件和事務日誌要在一個邏輯捲上c#


實現lvm快照進行mysql備份的流程bash

一、打開會話,施加讀鎖,鎖定全部表
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;

二、經過另一個終端,保存二進制日誌文件及相關位置信息;
# mysql -e 'show mater status' > /proc/master.info

三、建立快照卷
# lvcreate -L # -s -p r -n LV_NAME /path/to/source_lv

四、釋放鎖
mysql> UNLOCK TABLES;

五、掛在快照卷、備份
# mount
# cp -a

六、刪除快照卷和無用數據
# lvremove --force LV_NAME
# rm -rf mysql-bin.*

七、增量備份二進制日誌
# cp

八、故障發生、恢復數據
# source


mysql數據庫lvm快照備份
ide

一、打開會話,施加讀鎖,鎖定全部表,並刷新日誌;

mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;

二、經過另外一個終端,保存二進制日誌文件及湘椴信息;

# mysql -uroot -p -e 'show master status\G;' > /backup/master-`date +%F`.info		
# cat /backup/master-`date +%F`.info

三、建立快照卷

# lvcreate -L 3G -s -p r -n mydata_snap /dev/myvg/mydata

四、釋放鎖

mysql> UNLOCK TABLES;

五、掛在快照卷、備份

# mkdir /mnt/mydata_snap
# mount /dev/myvg/mydata_snap /mnt/mydata_snap/ -o ro
	
# mkdir /backup/full-backup-`date +%F`
# cp -a /mnt/mydata_snap/* /backup/full-backup-2015-03-05/

六、刪除快照卷和無用數據

刪除快照卷
# umount /mnt/mydata_snap/
# lvremove --force /dev/myvg/mydata_snap 

因爲這裏備份的日誌文件愛你是無用的,所以能夠刪除
# rm -rf /backup/full-backup-2015-03-05/data/mysql-bin.*

七、增量備份二進制日誌

(1)首先在mysql數據庫中作一些寫入操做:

mysql> FLUSH LOGS;
mysql> USE mydb;
mysql> INSERT INTO tutor(Tname) VALUES('it');
mysql> INSERT INTO tutor(Tname) VALUES('3dmax');
mysql> show master status;	#日誌文件變化、數據偏移位發生變化
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      584 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)	

(2)備份增量日誌:須要注意的是,因爲我使用了FLUSH LOGS滾動日誌,所以理論上是引用lvm快照卷備份後有兩個日誌的增量數據須要備份即mysql-bin.000004和mysql-bin.000005


(3)查看備份開始時的日誌位置:

[root@localhost ~]# cat /backup/master-2015-03-05.info 
*************************** 1. row ***************************
			File: mysql-bin.000004
		Position: 107
	Binlog_Do_DB: 
Binlog_Ignore_DB: 	

(4)導出日誌:

# mysqlbinlog --start-position=107 /mydata/data/mysql-bin.000004 > /backup/04.sql
# mysqlbinlog /mydata/data/mysql-bin.000005 > /backup/05.sql

八、恢復數據庫

1)模擬損壞:

我這裏仍是採用這直接刪除數據文件和目錄的方式:

# rm -rf /mydata/data*

2)恢復徹底備份:直接cp

# cp -a /backup/full-backup-2015-03-05/data/* /mydata/data/

3)啓動mysql服務

# service mysqld start

4)導入增量備份

# mysql -uroot -p < /backup/04.sql
# mysql -uroot -p < /backup/05.sql

5)使用lvm快照卷備份注意事項:若是須要備份單一庫,則InnoDB需設置爲獨立表空間

設置每一個表獨立使用一個表空間
mysql> SHOW GLOBAL VARIABLES LIKE '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)


  • 我的愚見:

  • 這種熱備工做我用的不是不少,多是公司的環境不一樣吧!我會在後續章節中和你們介紹第三款開源備份工具xtrabackup,這款備份工具我的感受是很是不錯,在性能方面遠超mysqldump,那麼咱們下回聊。

  • 下幾篇mysql文章的方向:

相關文章
相關標籤/搜索