LVM快照备份原理图
2.1 LVM: 几乎热备、物理备份,加读锁,直接备份原卷,那么你就得等备份操作完成后才能解锁.
2.2而LVM快照就是备份完成就可以解锁,速度极快,这就是为什么是几乎热备的原因
2.3前提:innoDB引擎的事务日志必须跟数据文件在同一个LV卷上;ibdata1 ib_logfile0 ib_logfile1若分开则创建快照时间点不一致,备份数据不一致,创建备份无意义。快照只能对逻辑卷LVM进行备份,并且只能对同一个卷组的逻辑卷进行备份。innoDB最好每表一空间
备份操作步骤:
1.建立lvm卷组myvg-mydata,挂载到/mydata/data下
[root@station253 ~]# lvcreate -L 2G -n mydata /dev/mapper/myvg-mydata
Logical volume "mydata" created
2.初始化Mysql将数据目录指向/mydata/data并建立数据库
3.同步日志并加读锁,不要关闭终端,否则锁将失效,滚动日志
mysql> SET sync_binlog=1; 未提交事务日志立刻写入文件
mysql> SET sql_log_bin=0; 关闭二进制日志
mysql> FLUSH TABLES WITH READ LOCK; 所有表加读锁
mysql> SHOW MASTER STATUS;
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
| mysql-bin.000002 | 1473 | | |
4. 新建终端为数据所在的卷创建快照:目的卷大小为原卷2倍,目标卷与原卷在同一卷组上;mysqldump是重读sql文件重执行极慢,lvm snap是在底层文件系统级别复制块,速度极快;
[root@station253 ~]# lvcreate -L 4G -n mydata-snap -p r -s /dev/mapper/myvg-mydata
Logical volume "mydata-snap" created
5.迅速释放读锁
mysql> UNLOCK TABLES;
6.挂载快照,拷备出来,卸载快照,删除快照
[root@station253 ~]# mount /dev/mapper/myvg-mydata-snap /snap
[root@station253 ~]# cp -aR /snap/* /backup
[root@station253 ~]# umount /snap
[root@station253 ~]# lvremove/dev/mapper/myvg-mydata-snap
7.模拟数据库崩溃,注意快照回来修正数据库属组属主,否则mysqld无法启动
[root@station253 ~]# servivce mysqld stop
[root@station253 ~]# rm -R /mydata/data/*
[root@station253 ~]# cp -aR /backup /* /mydata/data
[root@station253 ~]# chown -R mysql.mysql /mydata/data
[root@station253 ~]# servivce mysqld start
8. 恢复后立刻重做未提交事务,打开二进制日志
mysql> SHOW MASTER STATUS;
mysql> SET sync_binlog=1; 未提交事务日志立刻写入文件
mysql> SET sql_log_bin=1;
mysql> SHOW MASTER STATUS;
恢复时需注意问题:innodb引擎启动数据库时,因为有buffer pool缓存存在会对未提交事务回滚、已提交的事务同步到磁盘文件,有崩溃恢复过程。