mysql 基于LVM快照的备份

 

lvm原理:

当源数据改变的时候呢,cow就会记录下改变的值,当从快照读出的时候,如果数据没有改变那还是读取原来lvm的数据,如果数据改变了,那么该读取cow上面的数据。所以原来的lvm,也就是创建快照之前的lvm和现在cow快照上的数据是一致的。

优点

几乎是热备,不需要停mysql服务器,但是在执行快照时,依然要加上锁虽然时间很短

备份速度快

无需使用其他软件

缺点

无法预计服务停止时间,上锁时间,取决于上锁前执行最长的查询语句

数据如果分布在多个物理卷上就可能复杂的多。

创建快照前的准备,一般生产环境中,mysql在开始提供服务的时候,其文件数据都该保存在lvm卷中。实验中我们先创建lvm然后把mysql的数据目录mv到lvm中,这样就可以模拟生产环境了。

创建lvm

/etc/init.d/mysqld stop    ##先停数据库

pvcreate /dev/sdb

vgcreate sqlbak /dev/sdb

vcreate -L 500M -n sqlbck_lv sqlbak

mkfs.ext4 /dev/sqlbak/sqlbck_lv

mount /dev/sqlbak/sqlbck_lv /mnt/

mv /usr/local/mysql/* /mnt

/* 在移动之前,或者在创建lvm的时候,根据mysql数据目录的大小来创建lvm

我在创建的时候就忽略这点,所以我只能扩容了

lvcreate -L +300 /dev/sqlbak/sqlbck_lv sqlbak

缩减也复习下:

/etc/init.d/mysqld stop

umount /dev/sqlbak/sqlbck_lv            ##先卸载!

e2fsck -f /dev/sqlbak/sqlbck_lv

resize2fs /dev/sqlbak/sqlbck_lv 800M

lvreduce -L 800M /dev/sqlbak/sqlbck_lv

*/

/etc/init.d/mysqld start

现在正式开始备份

step1: 锁表,保证数据的一致性。flush table with read lock;

step2:查看master二进制当前的状态,以便slave的复制使用,或者其他的恢复使用。show master status;

step3: 为mysql数据目录所在的lvm做快照 lvcreate -s -n sqlbak_snap -L 100M /dev/sqlbak/sqlbck_lv

step4: 解锁unlock tables;

此时快照创建完毕,挂载快照到一个目录下,就可以读取里面的数据。当然也可以mv到其他的目录下用来恢复。

为了测试呢:我们先在mysql 插入一条数据。然后在mount 之前的快照,把mysql的数据目录设成挂载快照的挂载点,重新启动mysql,查看数据是否是之前的的数据。

最后:恢复完成之后,删除快照:lvremove /dev/sqlbak/sqlbak_snap

一般的错误都是权限的问题,第一反应看日志!

使用mylvmbackup备份数据。其本质就是对上面的操作进行封装

需要两点注意的是:mysql必须运行在lvm上;lvm有空余的空间用来生成临时的快照

依赖性真tm多

yum install make perl perl-Config-IniFiles perl-TimeDate perl-DBD-MySQL

wget http://www.lenzg.net/mylvmbackup/mylvmbackup-0.13.tar.gz

tar zxvf mylvmbackup-0.13.tar.gz

cd mylvmbackup-0.13

make install

which mylvmbackup

备份 MyISAM

mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar

--lvmsize=100M(快照大小) --backupdir=/path/backup

备份InnoDB:

mylvmbackup --user=root --password=yourrootsqlpassword --innodb_recover --skip_flush_tables --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar

备份的目录一个tar包 包含:三个文件目录,一个backup数据目录,.pos二进制锁表时的日志文件名和position。 backup-cnf...最后一个时配置文件

posted @ 2015-12-17 17:06  Rikewang  阅读(1340)  评论(0编辑  收藏  举报