逻辑卷快照是原卷的另一个访问路径,刚创建的逻辑卷快照是没有数据的,所有的访问都指向原卷,当原卷中的数据需要修改前,先前数据复制到逻辑卷快照中,

以后访问数据,未修改的数据来自原卷,被修改过的数据来着逻辑卷快照。逻辑卷快照仅仅是能提供时间一致性的文件访问通路。


lvm-snapshot:基于LVM快照的备份     

      1.事务日志(ib_logfile#)跟数据文件必须在同一个卷上,否则无法保证二者在时间点上的一致性

     2.创建快照卷之前,要请求mysql的全局锁,在快照创建完成之后释放锁

     3.在请求全局锁完成之后,做一次日志滚动;做二进制日志文件及位置标记(手动进行)


即时点还原场景:

hellodb使用的InnoDB存储引擎,在做过一次完备后,之后又有过数据的变动,变动后的数据还未来得及做备份,服务器硬件故障崩溃。


处理过程:

新机器上重新安装系统,部署mysql数据库。先用之前的完备做恢复,再根据二进制日志进行即时点恢复,恢复系统崩溃时的数据库状态。


准备过程

service mysqld stop

vim /etc/my.cnf

log-bin=/mydata/binlog/log-bin

chown -R mysql.mysql /mydata/binlog/

service mysqld restart

sed -i 's/MyISAM/InnoDB/' hellodb.sql

mysql -uroot -p < hellodb.sql 

mysql

SHOW DATABASES;

SHOW TABLE STATUS FROM hellodb\G;


备份步骤:

1.请求全局锁,并滚动日志

FLUSH TABLES WITH READ LOCK;

FLUSH LOGS;                

2.做二进制日志文件及位置标记(手动进行)

mysql -e 'SHOW MASTER STATUS' > /mydata/backups/binlog.pos

cat /mydata/backups/binlog.pos

File    Position        Binlog_Do_DB    Binlog_Ignore_DB

log-bin.000004  107

3.创建快照卷

lvcreate -L 100M -s -n hellodb-snap -p r /dev/mapper/vg_mysql-data

4释放全局锁

mysql

UNLOCK TABLES;

5、插入新数据 

mysql

USE hellodb;

CREATE TABLE newtb(ID INT);

INSERT INTO newtb VALUES (1),(2),(3),(4),(5);

SELECT * FROM newtb;       

6挂载快照并备份

mount /dev/mapper/vg_mysql-hellodb--snap /mnt/ -o ro

cd /mydata/backups/

tar zcvf all.tar.gz /mnt/*

mysqlbinlog --start-position=107 /mydata/binlog/log-bin.000004 > /mydata/backups/binlog.sql

scp /mydata/backups/all.tar.gz root@192.168.130.64:/mydata/backups

scp /mydata/backups/binlog.sql root@192.168.130.64:/mydata/backups

umount /mnt

7.备份完成之后,删除快照卷

lvremove /dev/mapper/vg_mysql-hellodb--snap



在一台新的机器上恢复

service mysqld stop

rm -rf /mydata/data/*

cd /mydata/data

tar  zxvf /mydata/backups/all.tar.gz -C ./

mv mnt/* ./

rm -rf mnt/

service mysqld start


mysql

SET SESSION sql_log_bin=0; (关闭二进制日志)

SOURCE /mydata/backups/binlog.sql;

SET SESSION sql_log_bin=1;


恢复注意事项:

  1.二进制日志保存好

      提取备份之后的所有时间至某sql脚本中

  2,还原数据,修改权限及属主属组等,并启动mysql

  3、做即时点还原


mylvbackup:perl脚本,快速基于LVM备份mysql