用snapshot方式对MySQL进行备份

MySQL有多种备份方式,包括mysqldump、mysqlhotcopy等。这里来介绍一下利用lvm的snapshot方式来对MySQL进行备份。


第一步:把数据库的datadir建在LV上

创建pv

# pvcreate /dev/sda8

创建vg

# vgcreate vg0 /dev/sda8

创建lv,不要把vg0的空间都占用,需要在vg0中预留足够的空间里来放置snapshot

# lvcreate -L 300G -n lv001vg0

查看刚刚创建好的lv

# lvdisplay

对lv创建文件系统

# mkfs -t ext3 /dev/vg0/lv001

mount逻辑卷

# mount /dev/vg0/lv001 /data

修改/etc/fstab,实现永久挂载

# vi /etc/fstab

在最后一行加入

UUID=cbf1ba6d-eff1-4886-a5c1-95435794b002   /data   ext3  defaults        0       2

其中UUID可以由指令blkid得到。

总结:创建pv→创建vg→创建lv→lv上创建文件系统→mount逻辑卷


安装数据库步骤就不再介绍,记得在装的时候指定datadir=/data就好了(在my.cnf里也要加入此参数)。


第二步:对lv做snapshot,并传送至远端备份机保存

具体脚本如下:

# vi /backup/backup.sh

date

/usr/local/mysql/bin/mysql -uroot -e "flush tables with read lock;"

/usr/local/mysql/bin/mysql -uroot -e "show master status\G;" > /backup/ule134_`date +"%Y%m%d"`.txt

/sbin/lvcreate -s -n 134snapshot -L 10G /dev/vg0/lvol0

/usr/local/mysql/bin/mysql -uroot -e "unlock tables;"

date

mount /dev/vg0/134snapshot /snapshot

mkdir /backup/`date +"%Y%m%d"`

rm -rf /backup/`date +%Y%m%d --date='2 days ago'`

rsync -av /snapshot/* /backup/`date +"%Y%m%d"`

umount /snapshot

/sbin/lvremove -f /dev/vg0/134snapshot

date


大概思路:对MySQL进行锁表,保持数据的一致性→show master status保存数据库的position,便于恢复→对lv做snapshot→对数据库解锁→mount刚创建的snapshot→创建一个当前日期为标志的新目录→删除2天前的备份数据→用rsync把snapshot里的数据传送至远端服务器(已经mount至本地)→对snapshot进行umount→删除snapshot。

脚本中有三次date,是为了在log中保存备份时间的长短。


第三步:用crontab进行部署

# crontab -l

0 3 * * * sh /backup/backup.sh >> /backup/backup.log

你可能感兴趣的:(mysql,MysqlDump,snapshot)