Home >Database >Mysql Tutorial >使用lvm-snapshot备份mysql数据库_MySQL

使用lvm-snapshot备份mysql数据库_MySQL

WBOY
WBOYOriginal
2016-06-01 13:04:271403browse

前提要求:

事务日志跟数据文件必须在同一个卷上;

创建快照卷之前,要请求MySQL的全局锁;在快照创建完成之后手动释放锁;

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

 

1、为数据施加读锁,滚动二进制日志文件并记录当前二进制文件起始时间段:

wKioL1RvSi_D4vfuAAFtKk5G1DY490.jpg

2、做快照;

wKiom1RvSoDiv_mdAABmlT0HCyc181.jpg

3、释放读锁:

wKioL1RvSx7D11F2AAAutnKi6FY453.jpg

4、挂载快照,将快照里面的数据复制出来,并删除快照:

[root@localhost mydata]# mount /dev/VG/mysql /mnt/ -o ro

[root@localhost mydata]# mkdir /mysqlback

[root@localhost mydata]# cp -a /mnt/ /mysqlback/20141121

[root@localhost mydata]# umount /mnt/

[root@localhost mydata]# lvremove /dev/VG/mysql

Do you really want to remove active logical volume mysql? [y/n]: y

Logical volume "mysql" successfully removed

5、向一个表插入数据是数据发生改变,要在最后使用二进制日志恢复此信息。

mysql> INSERT INTo newtb values('jack');

Query OK, 1 row affected (0.01 sec)

mysql> select * from newtb;

+------+

| Name |

+------+

| tom |

| jack |

+------+

2 rows in set (0.00 sec)

6、结合之前记录的二进制日志开始时间导出成一个文件

[root@localhost mydata]# mysqlbinlog --start-position=107 mysql-bin.000011 > /tmp/20141121.sql

7、将数据库停止,删除数据,尝试恢复数据

wKiom1RvTj2gy3E0AAJsJ4-Pw4g601.jpg

8、启动mysql服务并查看数据是否恢复:

wKiom1RvTrjR7p6fAAM4fDuE2lU178.jpg

9、使用二进制日志恢复后来创建的用户:

mysql> source /tmp/20141121.sql;

wKioL1RvUK7zh8yUAAA5lIuAUOw949.jpg

 

总结:

备份过程:

1、对MySQL数据库了施加读锁,防止在备份过程中有用户插入数据而导致备份后的数据不一致

2、回滚日志,使当前状态的数据做一个完整的备份,之后的数据用二进制日志恢复

3、使用SHOW MASTER STATUS命令记录日志的开始时间

4、使用lvcreate命令对lv做快照

5、去除读锁

 

恢复过程:

6、将创建好的lv快照挂载到目录,并将里面的数据复制出来

7、卸载快照、再删除快照

8、将从快照复制出来的数据复制到/data/mydata

9、使用mysqlbinlog结合之前记录的开始时间点导出需要的二进制数据为一个xx.sql文件

10、将sql文件导入数据库即完成整改恢复过程

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn