MySQL的第一款備份工具mysqldump,咱們在上篇文章中已經和你們聊過,若是你們還有疑惑,請點擊mysqldumpphp
MySQL的第二款備份工具lvm快照,那麼今天咱們就聊聊它lvm快照卷溫備html
mysqldump可以實現對InnoDB存儲引擎實現熱備,可是卻沒法實現對MyISAM引擎進行熱備;java
而今天將要和你們介紹lvm可以實現對MyISAM引擎實現幾乎熱備
python
使用lvm快照進行mysql的備份時,須要知足如下條件:
mysql
數據文件要在邏輯捲上sql
此邏輯卷所在卷組必須有足夠空間使用快照卷數據庫
數據文件和事務日誌要在一個邏輯捲上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文章的方向:
性能調試工具
壓力測試