使用LV备份前提:
事务日志(ib_logfile#)跟数据文件必须在同一个卷上,否则无法保证二者在时间点上的一致性 需要请求全局锁,适合晚上负载低的场合
备份步骤:
1、请求全局锁,并滚动日志 mysql> FLUSH TABLES WITH READ LOCK; mysql> FLUSH LOGS;
2、做二进制日志文件及位置标记(手动进行); mysql -e 'show master status' > /path/to/somefile
3、创建快照卷 lvcreate -L -s -n -p r /path/to/some_lv
4、释放全局锁 mysql> UNLOCK TABLES;
5、mount挂载快照卷并备份 scp
6、备份完成之后,unmount删除快照卷
7、复制binlog文件
恢复步骤:
1、还原数据,修改权限及属主属组等,并启动mysql 2、使用二进制日志提取备份之后的所有事件至sql脚本中; 3、做即时点还原
恢复示例:
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;