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...最后一个时配置文件