LVM快照备份流程

服务器

浏览数:139

2019-11-2

LVM备份MYSQL的前提(2选1):将已运行mysql迁移到LVM卷

#! bin/bash
echo "数据库信息将被备份在/backup目录下,并确定添加磁盘/dev/sdb"
read -p "请输入你的数据库密码:"   mysql_password
back_dir=/backup
if [ ! -d $back_dir ];then
        mkdir -p /backup
fi
file=`date +%F`-msyql.tar

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
##将mysql迁移到lvm上
##若是生产环境,不会有此步骤,mysql 会装在lvm上
lvm_remove_mysql(){
systemctl stop mysqld
umount /var/lib/mysql
lvremove /dev/mysqlvg/lv-mysql -y
mkfs.xfs -f /dev/sdb
pvcreate /dev/sdb  -y
vgcreate mysqlvg /dev/sdb
lvcreate -n lv-mysql -L 2G mysqlvg -y
mkfs.xfs -f /dev/mysqlvg/lv-mysql
##. 将数据迁移到LVM         先将新建的逻辑卷lv-mysql 挂在在mnt上,
##然后将数据库原始的信息拷贝到mnt中即拷贝到逻辑卷(lv-mysql)中,这样
##逻辑卷就有了数据库的原始信息,然后将逻辑卷从mnt取消挂载,挂载在/var/lib/mysql下,启动数据库,以后所有的信息都会存入逻辑卷中;(若/var/lib/mysql没人挂载,默认是系统盘,如果手动挂载,则读写存储会是你>挂载的盘)。至此,MySQL将迁移到lvm卷上。
systemctl stop mysqld
mount /dev/mysqlvg/lv-mysql /mnt/
cp -arf /var/lib/mysql/* /mnt

umount /mnt/ # 数据库原始的文件已经到逻辑卷中,目的达成,卸载临时>挂载

echo "/dev/mysqlvg/lv-mysql /var/lib/mysql  xfs defaults 0 0" >>/etc/fstab ## //加入fstab开机挂载   将已经含有数据库原始信息的逻辑卷
##挂载在数据库的默认路径下(/var/lib/mysql),这样所有的数据信息会存>到逻辑卷(sdb)中,而不是系统盘(sda)中
mount -a
if [ $? -ne 0 ];then
        echo '开机自动挂载'
fi

chown -R mysql.mysql /var/lib/mysql
systemctl restart mysqld
}

##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
###LVM快照备份
lvm_back(){
echo "flush tables with read lock;
                system lvcreate -L 500M -s -n lv-mysql-snap /dev/mysqlvg/lv-mysql;
                unlock tables;" | mysql -p"$mysql_password"
mysql -p"$mysql_password" -e 'show master status' > /backup/`date +%F_postion.txt`
mount -o nouuid /dev/mysqlvg/lv-mysql-snap /mnt/
cd /mnt/
tar -cf /backup/$file ./*
cd
umount /mnt/
lvremove -f /dev/mysqlvg/lv-mysql-snap
}



#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
##LVM快照恢复
lvm_recover(){
systemctl stop mysqld
rm -rf /var/lib/mysql/*
ls /var/lib/mysql/*
echo "已经模拟数据库损坏,清空/var/lib/mysql~~~~~~~~~~~~~~~~~~~~~~"
sleep 2
echo "导入数据~~~~~~~~~~~~~~"
tar -xf /backup/$file -C /var/lib/mysql/
chown -R mysql.mysql /var/lib/mysql/
systemctl restart mysqld
}

lvm_remove_mysql
lvm_back

```

作者:朱溪江