LVM快照备份原理图

wKiom1N-Zk7A7vdXAAGgmYAPF1k602.jpg

 

2.1 LVM: 几乎热备、物理备份,加读锁,直接备份原卷,那么你就得等备份操作完成后才能解锁.

2.2LVM快照就是备份完成就可以解锁,速度极快,这就是为什么是几乎热备的原因

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缓存存在会对未提交事务回滚、已提交的事务同步到磁盘文件,有崩溃恢复过程。