使用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;