lvm原理:

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

mysql数据库快照 mysql快照备份_数据库

优点

几乎是热备,不需要停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...最后一个时配置文件