逻辑卷快照是原卷的另一个访问路径,刚创建的逻辑卷快照是没有数据的,所有的访问都指向原卷,当原卷中的数据需要修改前,先前数据复制到逻辑卷快照中,
以后访问数据,未修改的数据来自原卷,被修改过的数据来着逻辑卷快照。逻辑卷快照仅仅是能提供时间一致性的文件访问通路。
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
转载于:https://blog.51cto.com/kaiyuandiantang/2317820