一、数据库的备份分类
- 从物理与逻辑的角度,备份可分为
1、物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
物理备份方法
冷备份(脱机备份):是在关闭数据库的时候进行的
热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件
温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作
2、逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份 - 从数据库的备份策略角度,备份可分为
1、完全备份:每次对数据库进行完整的备份
2、差异备份:备份自从上次完全备份之后被修改过的文件
3、增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份
二、数据库的备份方法
- 物理冷备
备份时数据库处于关闭状态,直接打包数据库文件
备份速度快,恢复时也是最简单的 - 专业备份工具mysqldump或mysqlhotcopy
mysqldump常用的逻辑备份工具
mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表 - 启用二进制日志进行增量备份
进行增量备份,需要刷新二进制日志 - 第三方工具备份
免费的MySQL热备份软件Percona XtraBackup
三、完全备份、增量备份概述与对比
完全备份:
是对整个数据库、数据库结构和文件结构的备份;
保存的是备份完成时刻的数据库;
是差异备份与增量备份的基础;
每次对数据进行完整的备份。
优点: 备份与恢复操作简单方便
缺点:
数据存在大量的重复;
占用大量的备份空间;
备份与恢复时间长。
增量备份:
MySQL增量备份是自上一次备份后增加/变化的文件或者内容
特点
没有重复数据,备份量不大,时间短;
依靠二进制日志文件进行逐次增量备份,单个文件丢失则数据不完整,安全性低。
MySQL二进制日志对增量备份有重要的作用
- 二进制日志保存了所有更新或者可能更新数据库的操作;
- 二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件;
- 只需定时执行flush logs方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份。
四、完全备份的实例
4.1 冷备份与数据恢复
需要先停止数据库服务,再直接打包压缩数据库文件
数据库所有文件目录:/usr/local/mysql/data
故障时,停止服务,将故障的数据库文件移走到备份文件夹中,解压刚才备份数据库包到/restore目录下,再移动到/usr/local/mysql/data下,再重启服务
4.2 mysqldump备份与恢复
备份方法:
实例1:
备份单独一个student库
恢复:
误删除单独一个库,恢复时,需要再建一下这个库
实例2:
备份多个数据库
误删除两个库
恢复:无需再创建数据库,可直接恢复
五、增量备份的实例(基于完全备份)
增量备份分类:
- 一般恢复
将所有备份的二进制日志内容全部恢复 - 断点恢复
基于位置恢复:
数据库在某一时间点可能既有错误的操作也有正确的操作
可以基于精准的位置跳过错误的操作
基于时间点恢复:
跳过某个发生错误的时间点实现数据恢复
MySQL二进制日志对增量备份有重要的作用
- 二进制日志保存了所有更新或者可能更新数据库的操作;
- 二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件;
- 只需定时执行flush logs方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份。
修改配置文件,开启二进制日志功能
以下所有的数据库操作(新增与误删除),都被记录在000001文件里
恢复:
首先需要刷新二进制文件,000002里会存储后续的数据库操作,而不会存在000001里面了。
查看二进制文件:
每一个数据库操作,在二进制文件中都是一个事务,以begin开头,commit结尾,以之前插入yangli的数据操作为例,可查看到:
5.1 一般恢复
直接把整个二进制文件的内容进行恢复。
当前的状态:
误删除表之后,先用完全备份恢复,再用二进制文件恢复表至上述状态
5.2 时间点恢复
从日志开头截止到某个时间点的恢复
从某个时间点到日志结尾的恢复
从某个时间点到某个时间点的恢复
想要恢复删除的lisi
查看二进制日志文件:000001
记录两个时间点:
误操作之前的时间点:201102 16:48:37
正确操作开始的时间点:101102 16:49:18
跳过了误操作。
5.3 位置点恢复
想要恢复删除的lisi
查看二进制文件:
记录两个位置点:
误操作之前的位置点 493
正确操作开始的位置点 700