MySQL基于LVM快照的备份恢复(二)

2015-07-16 12:09:48 · 作者: · 浏览: 1
14/binlog的binlog.txt里
+------------------+----------+--------------+------------------+
| File? ? ? ? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000016 |? 1068076 |? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> FLUSH LOGS; #刷新日志
mysql> FLUSH TABLES WITH READ LOCK; #读锁请求到后不要关闭此mysql交互界面


在innodb表中,即使是请求到了读锁,但InnoDB在后台依然可能会有事务在进行读写操作,可用"mysql> SHOW ENGINE INNODB STATUS;"查看后台进程的状态,等没有写请求后再做备份。
4.2、创建快照
以只读的方式创建一个1GB大小的快照卷data-snap:
[root@mariadb mysql55]# lvcreate --snapshot /dev/mygroup/mysqldata -n data-snap --size 1G --permission r


查看快照卷的详情(快照卷也是LV):
[root@mariadb mysql55]# lvdisplay


4.3、解除锁定
回到锁定表的mysql交互式界面,解锁:
mysql> UNLOCK TABLES;
mysql> SET GLOBAL sync_binlog=0;? #此参数可以根据服务器磁盘IO的负载来调整


4.4、挂载快照卷并备份数据
[root@mariadb ~]# mount /dev/mygroup/data-snap /tmp/? #挂载快照卷
[root@mariadb ~]# ls /tmp/data/
ibdata1? ib_logfile0? ib_logfile1? mariadb.pid? mydb1? mydb2? mysql? performance_schema? test
[root@mariadb mysql55]# cp -aR /tmp/data /backup/2015-04-14/data/? #备份数据
[root@mariadb mysql55]# ls /backup/2015-04-14/data/data/
ibdata1? ib_logfile0? ib_logfile1? mariadb.pid? mydb1? mydb2? mysql? performance_schema? test


4.5、释放快照卷


[root@mariadb ~]# umount /tmp/
[root@mariadb ~]# lvremove /dev/mygroup/data-snap
Do you really want to remove active logical volume data-snap? [y/n]: y
? Logical volume "data-snap" successfully removed


5、数据灾难恢复


破坏数据,把数据目录下的所有文件都删除:
[root@mariadb mysql55]# rm -rf /mnt/mydata/data/*
[root@mariadb mysql55]# service mysqld stop? #PID文件也被删掉了,无法正常停止服务
?ERROR! MySQL server PID file could not be found!
[root@mariadb mysql55]# killall mysqld


把备份数据copy到数据目录:
[root@mariadb mysql55]# cp -Ra /backup/2015-04-14/data/data/* /mnt/mydata/data/
[root@mariadb mysql55]# ll /mnt/mydata/data/? #确认各文件的权限是否为mysql
启动服务:
[root@mariadb mysql55]# service mysqld start
Starting MySQL SUCCESS!


检查数据是否已恢复:
mysql> SHOW DATABASES;
+--------------------+
| Database? ? ? ? ? |
+--------------------+
| information_schema |
| mydb1? ? ? ? ? ? ? |
| mydb2? ? ? ? ? ? ? |
| mysql? ? ? ? ? ? ? |
| performance_schema |
| test? ? ? ? ? ? ? |
+--------------------+
6 rows in set (0.00 sec)
mysql> SELECT * FROM mydb1.tb1;
+----+------+------+
| id | name | age? |
+----+------+------+
|? 1 | tom? |? 10 |
|? 2 | jack |? 20 |
|? 3 | zcj? |? 18 |
+----+------+------+


6、总结


基于LVM的数据备份方案几乎实现了热备,只是在请求读锁时会影响线上的业务,一旦当读锁请求到,创建快照几乎是瞬间完成,快照卷创建好后就可解除锁定,而备份就像复制或归档文件一样简单。数据恢复时只需要关闭mysql进程,把备份的数据复制到相应的数据目录,确保数据目录权限正确,启用服务即可,由于是直接复制的数据文件,所以索引不用重建。