数据备份的重要性
- 备份的主要目的是灾难恢复
- 在生产环境中,数据的安全性至关重要
- 任何数据的丢失都可能产生严重的后果
造成数据丢失的原因:
- 程序错误
- 人为操作错误
- 运算错误
- 磁盘故障
- 灾难 (如火灾、地震) 和盗窃
扩展:容灾
容灾系统:指,在相隔较远的异地,建立两套或者多套功能相同的IT系统 相互之间可以进行健康 状态的监控和功能切换,当一处系统因为意外(如,火灾、地震、服务器人为破坏 等) 停止工作后,整个应用系统可以切换到另一处,使得该系统功能可以继续正常工作。
备份的分类
从物理与逻辑角度,分为
物理备份
对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。
这种类型的备份适用于在出现问题的时候需要快速恢复的大型重要数据库。
物理备份又可以成为冷备份(脱机备份)、热备份(连接备份)和温备份
① 冷备份 (脱机备份) :
是在关闭数据库的时候进行的(tar)
② 热备份 (联机备份) :
数据库处于运行状态,依赖于数据库的日志文件(mysqlhotcopy mysqlbackup)
③ 温备份
数据库锁定表格(不可写入但可读)的状态下进行备份操作(mysqldump)
逻辑备份
逻辑备份是对数据库逻辑组件的备份.表示为逻辑数据库结构
这种类型的备份适用于可以编辑数据值或表结构
从数据库备份策略角度,分为
完全备份
每次对数据进行完整备份
会导致备份文件占用空间巨大,并且有大量的重复数据,恢复时,直接使用完全备份的文件即可
差异备份
备份那些自从上次完全备份之后被修改过的所有文件
每次差异备份,都会备份上一次完全备份之后的数据,可能会出现重复数据。恢复时,先恢复完全备份的数据,再恢复差异备份的数据
增量备份
只有在上次完全备份或者增量备份后被修改的文件才会被备份
每次增量备份都是备份在上一次完全备份或者增量备份之后的数据,不会出现重复数据的情况,也不会占用额外的磁盘空间
恢复数据,需要按照次序恢复完全备份和增量备份的数据
备份方式的比较
备份方式 | 完全备份时状态 | 第一次添加内容 | 备份内容 | 第二次添加内容 | 备份内容 |
完全备份 | 表1+表2 | 表3 | 表1+表2+表3 | 表4 | 表1+表2+表3+表4 |
差异备份 | 表1+表2 | 表3 | 表3 | 表4 | 表3+表4 |
增量备份 | 表1+表2 | 表3 | 表3 | 表4 | 表4 |
完全备份创建多少都会把原来的数据再备份一遍
差异备份会把上一次备份多出来的数据再备份一遍
增量备份都会备份每一份多出来的的数据
如何选择逻辑备份策略(频率)
合理值:
一周一次的全备,全备的时间需要在不提供业务的时间区间进行 PM 10点 AM 5:00之间进行全备,最好在凌晨1~5点
增量:3天/2天/1天一次增量备份
差异:选择特定的场景进行备份
一个处理(NFS)提供额外空间给与mysql 服务器用
常见的备份方法
物理冷备
- 备份时数据库处于关闭状态,直接打包数据库文件
- 备份速度快,恢复时也是最简单的
专用备份工具mysqldump或mysqlhotcopy
- mysqldump常用的逻辑备份工具
- mysqlhotcopy仅拥有备份MyLSAM和ARCHIVE表
启用二进制日志进行增量备份
- 进行增量备份,需要刷新二进制文件
Mysql支持增量备份,进行增量备份时必须启用二进制日志。二进制日志文件为用户提供复制,对执行的数据库更改所需的信息进行恢复。如果进行增量备份(包含上次完全备份或增量备份以来发生的数据修改),需要刷新二进制日志
第三方工具备份
- 免费的MYSL热备份软件Percona XtraBackup
MySql完全备份
- 是对整个数据库、数据库结构和文件结构的备份
- 保存的时备份完成时刻的数据库
- 是差异备份和增量备份的基础
优缺点
优点:
备份与恢复操作简单方便
缺点:
数据存在大量的重复
占用大量的备份空间
备份与恢复时间长
完全备份的分类
物理冷备份与恢复
- 关闭MYSQL数据库
- 使用tar命令直接打包数据库文件夹
- 直接替换现有MYSQL目录即可
mysqldump备份与和恢复
- MySQL自带的备份工具,可方便实现对MYSQL的备份
- 可以将指定的库,表导入为SQL脚本
- 使用命令mysql导入备份的数据
导出使用的是Mysqldump;导入使用的是Mysql命令
实验 Mysql数据库完全备份操作
InnoDB 存储引擎的数据库在磁盘上存储成三个文件:
- db.opt(表属性文件)
- 表名.frm(表结构文件)
- 表名.ibd(表数据文件)
环境准备
use tdd;
create table tdd1(id int(4) not null auto_increment primary key,
name varchar(10) not null,
age char(10) not null,
hobby varchar(50));
insert into tdd1 values(1,'zhangsan',22,'diaoyu');
insert into tdd1 values(2,'lisi',21,'xijiao');
insert into tdd1 values(3,'wangwu',20,'anmo');
insert into tdd1 values(4,'aodaye',19,'duqiu');
select * from tdd1;
物理冷备份与恢复
方法一
备份
mysql下的data就是我们的数据
恢复
方法二
关闭systemctl stop mysqld
yum -y install xz
#压缩备份
tar Jcvf /opt/mysql_all$(date +%F).tar.xz /usr/local/mysql/data/
mv /usr/local/mysql/data/ /opt/
解压恢复
tar Jxvf /opt/mysql_all_2024-03-25.tar.xz -C ./
开启 systemctl start mysqld
mysqldump 备份与恢复(温备份)
完全备份一个或多个完整的库 (包括其中所有的表)
mysqldump -u root -p[密码] --databases 库名1 [库名2] ... > /备份路径/备份文件名.sql
#导出的就是数据库脚本文件
完全备份 MySQL 服务器中所有的库
mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql
完全备份指定库中的部分表
mysqldump -u root -p[密码] 库名 [表名1] [表名2] ... > /备份路径/备份文件名.sql
例:
mysqldump -u root -p [-d] test test1 test2 > /opt/test_test1.sql
#使用“-d”选项,说明只保存数据库的表结构
#不使用“-d"选项,说明表数据也进行备份
#做为一个表结构模板
查看备份文件
grep -v "^--" /opt/test_test1.sql | grep -v "^/" | grep -v "^$"