数据库备份之lvm快照热备

24次阅读

共计 1439 个字符,预计需要花费 4 分钟才能阅读完成。

使用的是虚拟机环境,先在虚拟机中添加一块儿新的硬盘。然后给硬盘分区
fdisk -l #查看分区信息 pvcreate mysql_pv /dev/sdb #创建物理卷 vgcreate vgmysql /dev/sdb #创建卷组 lvcreate -L 1024M -n lv0 vgmysql #创建逻辑卷 mkfs.ext4 /dev/vgmysql/lv0 #格式化挂载 mount /dev/vgmysql/lv0 /mnt #挂载逻辑卷 service mysqld stop #关闭 mysql 服务 cp -a /var/lib/mysql/* /mnt #将数据库数据拷贝到 mnt 目录下 umount /dev/vgmysql/lv0 #移除挂载信息 mount /dev/vgmysql/lv0 /var/lib/mysql/ #将逻辑卷与 Mysql 数据目录挂载 service mysqld start #重启 mysqld 服务

设置开机自动挂载,在 /etc/fstab 文件中配置。
最好不要采用在 /etc/fstab 直接指定分区(如 /dev/sdb1)的方法,因为设备的顺序编码在关闭或者开启服务器过程中可能发生改变,例如 /dev/sdb1 可能会变成 /dev/sdb2。推荐使用 UUID 来配置自动挂载数据盘。
查询磁盘分区的 UUID

blkid /dev/sdb1

UUID= 一串数字:要挂载的磁盘分区的 UUID
/var/lib/mysql:挂载目录
ext4:分区格式为 ext4
defaults:挂载时所要设定的参数 (只读,读写,启用 quota 等),输入 defaults 包括的参数有 (rw、dev、exec、auto、nouser、async) 0:使用 dump 是否要记录,0 为不需要,1 为需要 2:2 是开机时检查的顺序,boot 系统文件为 1,其他文件系统都为 2,如不要检查就为 0

在给 lv0 做快照之前,先使用 FLUSH TABLES 和 FLUSH TABLES WITH READ LOCK 强行将所有 OS 的缓冲数据写入磁盘(类似于操作系统的 sync 命令),同时将数据库置为全局只读。快照完成之后,再使用 UNLOCK TABLES 解锁。然后只需要将快照进行挂载,复制其中数据,在复制完成之后删除该快照即可
! /bin/bash
TIMESTAMP=date +%Y%m%d%H%M%SHOSTNAME=”127.0.0.1″USERNAME=”root”PASSWORD=”12345678″MOUNT=/bin/mountUMOUNT=/bin/umountLVCREATE=/usr/sbin/lvcreateLVREMOVE=/usr/sbin/lvremoveMYSQL=/usr/bin/mysqlTAR=/bin/tarSNAP_SIZE=1024mSNAP_MYSQL=/dev/vgmysql/lv0MOUNT_POINT=/mnt
EXEC_MySQL=”FLUSH TABLES;FLUSH TABLES WITH READ LOCK;FLUSH LOGS;SNAP_MYSQL /dev/vgmysql/lv0UNLOCK TABLES;”
echo “$EXEC_MySQL” | $MYSQL-u$USERNAME-p$PASSWORD-h$HOSTNAME
$MOUNT $SNAP_MYSQL $MOUNT_POINT
cd /root$TAR -zcvf ${TIMESTAMP}.tgz $MOUNT_POINT
$UMOUNT $MOUNT_POINT$LVREMOVE -f $SNAP_MYSQL

正文完
 0