Using LVM Snapshot to Backup MySQL

  1. 数据库全局读锁
    flush tables with read lock;
  2. LVM 快照
    lvcreate -L 500M -s -n mysql-snap /dev/datavg/mysql-snap
    mysql -uroot -p'Jove@123' -e 'show master status' > /backup/date +%F_position.log
  3. 释放全局读锁(关闭全局锁会话时,锁将自动失效)
    unlock tables;
  4. 挂载快照卷(只读)
  5. 从快照卷中复制数据(cp/tar)
  6. 卸载并删除快照卷
#! /bin/bash
# LVM Snapshot for mysql backup

backup_dir=/backup/`date +%F`
[ -d $backup_dir ] || mkdir -p $backup_dir

echo "FLUSH TABLES WITH READ LOCK; \
SYSTEM lvcreate -L 500M -s -n mysql-snap /dev/datavg/mysql; \
SHOW MASTER STATUS; \
UNLOCK TABLES;" | mysql -uroot -p'welcome@123' > $backup_dir/backup.log

# nouuid, for xfs
mount -o ro,nouuid /dev/datavg/mysql-snap /mnt

rsync -a /mnt/ $backup_dir

if [ $? -eq 0]; then
umount /mnt
lvremove -f /dev/datavg/mysql-snap
fi