MySQL - LVM逻辑卷备份(物理备份)

lvm-snapshot(工具备份)

优点:

  • 几乎是热备(穿件快照前把表上锁,创建完成后立即释放)
  • 支持所有引擎
  • 备份速度快
  • 无需使用昂贵的商业软件(它是操作系统级别的)

缺点:

  • 可能需要跨部门协作(使用操作系统级别的命令,DBA一般没有权限)
  • 无法预计服务停止时间
  • 数据如果分布在多个卷上比较麻烦(针对存储级别而言)

为什么选择lvm快照备份?

原因:因为锁表的时间不一致,在锁表的瞬间是不能写入的,对其进行快照备份,备份完成后立即解锁,然后服务可以正常使用(写入等操作)比如数据量大的时候,做快照一下子就拍了,然后立即解锁,就不影响写入等操作。如果用mysqldump备份,那么数据量大的时候,锁表时间长,就会影响效率

创建LVM

 MySQL - LVM逻辑卷备份(物理备份)_第1张图片

图片来源:

http://Linux下的磁盘管理之LVM详解及lvm的常用磁盘操作命令_yg@hunter的博客-CSDN博客_lvm命令

操作流程

  • flush table with read local;//全局加锁
  • create snapshot;//快照
  • show master status; show slave status;[可选]
  • unlock tables;//释放锁
  • Copy files from the snapshot//从快照卷中复制数据cp tar[40 m]
  • Unmount the snapshot//挂载快照卷
  • Remove snapshot//卸载并删除快照卷

正常安装MySQL

1.安装系统
2.准备LVM
3.安装mysql,默认datadir=/var/lib/mysql

MySQL运行一段时间,数据并没有存储LVM:将现在的数据迁移到LVM


准备lvm及文件系统//先添加一块磁盘

[root@localhost centos]# vgcreate datavg /dev/sdb

MySQL - LVM逻辑卷备份(物理备份)_第2张图片


 

[root@localhost centos]# lvcreate -L 2G -n mysql datavg //创建2G的VG
[root@localhost centos]# mkfs.xfs /dev/datavg/mysql //格式化磁盘分区

将数据迁移到LVM

[root@localhost centos]# systemctl stop mysqld //停止MySQL服务
[root@localhost centos]# mount /dev/datavg/mysql /mnt/ //将快照挂载到临时目录
[root@localhost centos]# cp -a /var/lib/mysql/* /mnt/ //拷贝MySQL数据到挂载的临时目录

[root@localhost centos]# umount /mnt/ //卸载快照
[root@localhost centos]# vim /etc/fstab //更改配置文件设置自动挂载
/dev/datavg/mysql /var/lib/mysql xfs defaults 0 0



[root@localhost centos]# mount -a //自动挂载/etc/fstab文件没有挂载的设备,不管已挂载过的设备
[root@localhost centos]# chown -R mysql.mysql /var/lib/mysql //递归更改/var/lib/mysql主组和属组
[root@localhost centos]# systemctl restart mysqld //重启MySQL

LVM快照备份流程

加全局锁
mysql>flush table with read local;
创建快照
lvcreate -L 500M -s -n mysql-snap /dev/datavg/mysql;
mysql -p'20011004*LmL' -e ‘show master status’> /backup/`data +%F`_position.txt

释放锁
create snapshot;

必须同一会话中完成 
[root@localhost centos]# echo "FLUSH TABLES WITH READ LOCK;SYSTEM lvcreate -L 500M -s -n mysql-snap /dev/datavg/mysql;"
| mysql -p'数据库密码'

从快照中恢复

[root@localhost centos]# mount -o ro,nouuid /dev/datavg/mysql-snap /mnt/ //xfs -o ro,nouuid
[root@localhost centos]# mkdir -p /backup
[root@localhost centos]# tar -czf /backup/mysql_`date +%F`.tar.gz /var/lib/mysql/*

移除快照


[root@localhost centos]# umount /dev/datavg/mysql-snap
[root@localhost centos]# lvremove /dev/datavg/mysql-snap -f

脚本制作快照

#!/bin/bash
#LVM backmysql.....
back_dir=/backup/mysql_`date +%F`


[ -d $back_dir ] | mkdir -p $back_dir


echo "FLUSH TABLES WITH READ LOCK;SYSTEM lvcreate -L 500M -s -n mysql-snap /dev/datavg/mysql;" | mysql -p'20011004*LmL'


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


rsync -a /mnt/ $back_dir


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

定时任务管理Cron


crontab -e

0 2 * * * /opt/mysql_back.sh

你可能感兴趣的:(数据库,mysql,数据库)