总结:MySQL备份与恢复的三种方法

来源:这里教程网 时间:2026-02-28 00:58:59 作者:

1.利用mysqldump实现从逻辑角度完全备份mysql,配合二进制日志备份实现增量备份2.利用lvs快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备

1.利用mysqldump实现从逻辑角度完全备份mysql,配合二进制日志备份实现增量备份

2.利用lvs快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份

3.利用percona公司的xrabackup实现完全热备份与增量热备份

实验环境:RHEL5.8 ,SElinux关闭,MySQL是tar包初始化安装版本5.5.28

一.测试环境准备

1.1 mysql的安装就不说了,见

1.2 编缉/etc/my.cnf把二进制日志存放目录改到其它非数据目录,innodb每表一文件

建立一目录用于存放二进制日志

mkdir /mybinlog   chown mysql:mysql /mybinlog  

修改my.cnf

启动mysqld

service mysqld start 

1.3 创建一个测试库与测试表

1.4 创建用于存放备份的目录

mkdir /myback  chown -R mysql:mysql /myback  

二,用mysqldump实现备份

2.1 mysqldump用来温备,所以我们得为所有库加读锁,并且滚动一下二进制日志,并记录当前二进制文件位置

查看有没有备份成功,有没有启用新二进制的日志,查看备份的文件中有没有记录完整备份后二进制的位置

备份二进制日志

cp /mybinlog/mysql-bin.000001 /myback/2012-12-3.19-23.full.00001 

2.2 模拟数据库意外损坏,测试完整恢复

初始化mysql并启动mysql

恢复到备份状态,备份前先关闭对恢复过程的二进制日志记录,因为记录恢复语句是毫无意义的

打开二进制记录并查看恢复状况

mysql> show databases; 

2.3 模拟一种场景,我往linux表中新添加了数据,然后不小心将这个表删了,我们要恢复到删除之前的状态,并且新加的数据还存在。

2.3.1 新增数据

我们先恢复完整数据,再恢复完整备份后到删除之前的数据,对应二进制日志就是完整备份后的二进制日志位置到删除表之前的位置

2.3.2 先恢复完整备份,同样恢复过程不要记录日志

mysql  /myback/2012-12-3.19-23.full.sql 

2.3.3 查看删除表时的记录位置

2.3.4 由上图可知删除是在8893时做的,将二进制文件中完整备份到删除表之前的记录导出

由于这个二进制日志是我们完整恢复后才启用的,香港服务器租用,所以我们直接从头开始即可,如果你的二进制日志很多,请查看完整备份中记录的备份时的位置,从那开始到删除之前即可

将这段二进制记录应用到mysql的库中

进入数据库查看数据有没有恢复

基于mysqldump通常我们就是完整备份+二进制日志来进行恢复的。

三,利用lvm的快照来备份MySQL

要求你的MySQL的数据目录必须在lvm卷上,下面来演示过程

3.1 建立lvm卷组,挂载到/data/mydata下,这个我就不演示了

3.2 初始化MySQL时将数据目录指向/data/mydata,安装过程见上链接

3.3 同样如第一步那样准备环境

3.4 在MySQL中为所有表加读锁,不要关闭终端,香港服务器,否则锁将失效,滚动日志

3.5 另开一终端速度建立快照,我的那个卷组是/dev/myvg/mydata

lvcreate -L 200M -n mysql-snap -s -p r /dev/myvg/mydata  

3.4 速度释放读锁

3.5 挂载快照,拷备出来,卸载快照,删除快照

3.6 就这样一次完整备份就完成了,下面来测试能否正常使用

3.7 如果在完整备份后MySQL出现故障,与mysqldump一样,虚拟主机,先恢复上次的完整备份,再利用二进制日志恢复,二进制恢复再啰嗦一遍,找到完整备份时的二进制位置,把从那时到故障前的日志用mysqlbinlog导出来,然后批处理方式导入到MySQL中。这个同mysqldump中实验一致就不重复了。

用lvm的快照来备份速度是非常快的,而且几乎热备,恢复也很快速,操作也简单,完整恢复后再将相应二进制恢复即可。

四:基于xtrabackup来完全备份,增量备份,热备份MySQL

下载地址:

4.1 下载安装xtrabackup,我用的是percona-xtrabackup-2.0.3-470.rhel5.i386.rpm

rpm -ivh percona-xtrabackup-2.0.3-470.rhel5.i386.rpm 

4.2 MySQL基本环境与第一步的一致

4.3 为备份建立一个只有备份权限的用户

4.4 完整备份一次MySQL

数据会完整备份到/myback/中目录名字为当前的日期,extrabackup会备份所有的InnoDB表,MyISAM表只是复制表结构文件、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。除了保存数据外还生成了一些extrabackup需要的数据文件

4.4 测试恢复MySQL,用extrabackup来完整恢复

4.5 我们来实验一下增量备份

4.5.1 在表中新增一些数据

4.5.2 增量备份

增量备份只能对InnoDB引擎做增量备份,对MyISAM的表是完全复制

4.6 测试增量备份恢复

将增量备份全并到完整备份中去

恢复数据,并起动MySQL

查看数据有没丢失

如果在增量备份后数据库出现故障,我们需要通过完整备份+到现在为止的所有增量备份+最后一次增量备份到现在的二进制日志来恢复。

到此总结完成,有些细节可能把握的不够准确,如有什么错误,欢迎留言指正,感谢!

本文出自 “Free Linux,Share Linux” 博客,请务必保留此出处

相关推荐