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文章的方向:
性能调试工具
压力测试