备份策略不同,恢复方式也不同。
在进行数据备份的时候,能使用冷备份就使用冷备份,安全可靠,
但是冷备份自己的缺点是【每一个数据库都对应着一个前端的业务】此时前端业务停止可能带来经济损失。
一.备份类型
根据服务是否在线,来进行备份类型的分类。【针对MySQL】
1.热备份
服务处于在线状态,正常进行数据读写操作,同时备份数据
2.冷备份
服务不在线,备份数据,备份完成后重新打开服务
3.温备份
服务在线,只能进行查询操作,同时备份数据
通过锁表的方式进行实现
根据备份的数据量的多少,来进行备份类型的分类。【适用于全部应用到备份概念的地方】
1.完全备份
每次备份的时候,备份所有数据。
2.增量备份【增量备份除了需要和完全备份去比,还要和上一次的增量备份去比。】
第一:备份完全备份之后,变化的数据
第二:备份上一次增量备份后变化的数据
假设是以完全备份加上增量备份的方式去进行数据备份,
如上图所示,当你的数据备份方式采用如上的完全备份+增量备份的方式去进行数据备份的时候,
第一天完全备份是备份所有的数据
第二天增量备份是备份完全备份之后变化的数据
第三天增量备份是备份增量备份之后变化的数据
备份策略不同,恢复方式也不同。
所以当数据丢失需要进行数据恢复的时候,应该从第一天完全备份开始进行数据恢复,此时恢复了所有第一次进行完全备份的数据,
然后按照第一次增量备份的数据,恢复第一次增量备份时的数据,此时恢复了所有第二次进行数据备份的数据。
最后按照最后一次数据备份时备份的数据,进行数据备份,此时恢复了所有第三次进行数据备份的数据。
3.差异备份【差异备份永远是跟最近一次的完全备份之后的数据去比。】
备份完全备份之后所有变化的数据。
假设是以完全备份加上差异备份的方式去进行数据备份,
备份策略不同,恢复方式也不同。
此时如果发生数据丢失,需要进行数据还原的时候,首先应该从第一次完全备份的时候进行数据恢复。然后直接去恢复最后一次的差异备份就可以了。
【公司的备份策略可能是这样的一天进行一次完全备份,每隔一个小时进行一次增量备份或者是差异备份。】【如果备份策略是完全+增量备份的话,当数据丢失的时候,是需要逐一恢复数据才可以】【如果备份策略是完全+差异的话,当数据丢失的时候,只需要恢复两次数据,第一次恢复数据是恢复完全备份时的数据,第二次恢复数据是最后一次恢复差异备份时的数据】
在Linux操作系统中scp是一个完全传输工具,每次拷贝的时候都是拷贝的所有数据。
在Linux操作系统中rsync是一个增量传输工具,每次只传输更改过的部分,极大提高了效率。
最后一种分类根据备份的结果来分。【只适用于MySQL】
1.逻辑备份 【针对MySQL】
生成数据操作的SQL语句。
从备份数据的速度来说,逻辑备份的速度要比物理备份的速度要快得多。
备份出来的结果是一大堆的SQL语句。
逻辑备份的结果就是一个普通的文本文件.【文本文件中保存的就是】
如上图所示,这个sql文件就是一个逻辑备份的结果。这个sql文件是一个文本文件,其中记录的是一大堆的SQL语句。
如上图所示,这个mysqldump这个工具就是MySQL数据库准备的一个逻辑备份工具。
2.物理备份【类似于使用cp这样的工具】
直接备份数据文件
如上图所示,这个物理备份工具需要额外下载。
我们在进行数据备份的时候,该备份哪些数据?
表的数据和索引,表的结构,配置文件,二进制日志,触发器,存储过程。
如上图所示,这个mysql数据库下的frm文件存储的是表结构,ibd存储的是表的数据和表的索引,
二.逻辑备份工具mysqldump常用选项的介绍。
如上图所示,此时有一些mysqldump的常用选项。
1.常用选项
1.备份所有数据库【使用这个工具做完全备份就是使用的这个选项。】
--all-databases
如上图所示,此时将所有数据库的SQL语句都重定向到一个sql文件中,。
2.备份指定的数据库【备份单个的数据库】
--database 数据库名称
3.在备份文件中记录数据库当前正在使用的二进制日志文件名称,最后一个事件的position
1.是这行信息在sql文件中是非注释内容。【方便后续去配置数据库的主从复制】
2.是这行信息在sql文件中是注释内容。
--master-data={1|2}这个值等于1或者2
如果在进行逻辑备份的时候加上这样一个选项--master-data={无论是等于1或者2}
都会在sql备份文件的结尾加上这样一行信息:
change master to 二进制日志文件名称, 事件位置
当--master-data=2的时候这行信息在sql文件中是一个注释,
当--master-data=1的时候,这行信息在sql文件中不是一个注释。
如上图所示,这是--master-data=1的时候,这行信息在sql文件中不是一个注释。
这行信息的作用:
能看到备份数据的时候,此时数据库所使用的二进制日志文件,以及最后一个事件的位置。
比如说此时最后一个事件的位置是154,这就意味着从我备份完成之后数据库再次进行写操作的时候,是从154开始记录的。这个最后一个事件的位置,方便我们后续的增量备份和差异备份。
4.生成新的二进制日志文件 【同样是为了方便后续做差异备份和增量备份。】
--flush-logs
这里的3和4选项二选其一就可以,都是为了方便后续做增量备份和差异备份。
如上图所示,这是查看当前这个数据库正在使用哪个二进制日志文件,以及最后一个事件的位置。
5.锁表
之后这个表只能进行查询操作,其他操作都不能进行。
--lock-all-tables
如上图所示,这个选项就是同时备份这张表上的触发器。【这个选项默认就是启用的】
6.备份存储过程
--routines
mysqldump -uroot -p密码 --all-databases --master-data=2 --lock-all-tables > 备份文件
建议将备份文件单独保存到一个硬盘上,单独保存到一个存储设备上。
可以单独的把备份文件保存在一个NFS服务器上,或者说把备份文件保存在一个单独的磁盘阵列柜上。
三.案例:完全+增量备份
1.准备存储备份文件的设备
如上图所示,将整块盘都格式化为ext4的文件系统。
如上图所示,这是将块设备/dev/sdd/挂载到/mysql/backup/作为专门存放备份文件的磁盘。
同时因为这个块设备是ext4的文件系统,所以会自动生成一个lost+found这个目录,我们需要把这个目录删除,此时这个/mysql/backup/MySQL软件才能正常使用。
2.模拟周一完全备份的案例
如上图所示,这是一个完全备份的案例。
如上图所示,这个文件就是一个模拟周一完全备份的文件,
3.登录数据库,模拟写操作;进行周二的增量备份
如上图所示,这就是周二数据库这个表发生的数据改变。
增量备份需要将第一次完全备份之后变化的数据保存下来。
增量备份实现的方式就是使用二进制日志,就是把二进制中记录下的周二的修改操作备份一下,
那么这里就有一个问题了?
从哪个事件位置进行增量备份?
如上图所示,这就是我第一次完全备份时候所使用的二进制日志文件,以及最后一次事件的位置。
也就是说数据库之后在发生所有的写操作都是由6152开始的,
也就是增量备份的操作就是把这个二进制日志文件中从6152之后的所有写操作都备份下来,就完成了一次增量备份。
如上图所示,此时将二进制日志文件中事件位置为6152之后的事件都重定向到二进制日志目录下,并且这个文件的名称以时间命名。
4.登录数据库,模拟写操作,进行周三的增量备份
如上图所示,这是周三数据库数据发生的一些变化,我们需要将产生这些变化的事件记录下来。
如上图所示,此时我们可以去查看周二的这个备份文件,这个备份文件中最后一个事件的终止位置是哪里,我们就需要从二进制日志文件的对应位置到最后的所有写操作都备份下来。
如上图所示,此时这个周二的备份文件的最后一个事件终止位置是6512,
如上图所示,此时就完成了周三的增量备份,
5.登录数据库,模拟写操作,模拟数据库故障。
如上图所示,这是登录数据库,然后更新教务库的教师表的数据。这是周四的操作。
如上图所示,这是模拟数据库故障,然后把数据库数据目录下的所有数据全部删除,
6.进行MySQL数据库数据恢复
(1)恢复MySQL数据库正常运行。
想让MySQL进行数据恢复,还需要将MySQL数据库启动,但是MySQL数据库启动还需要生成MySQL数据库必须的数据表和数据库,此时就需要手动初始化数据库。
如上图所示,此时MySQL数据库初始化完成。
MySQL数据库启动所必须的数据库和数据表都有,此时可以启动MySQL数据库进行数据恢复操作。
如上图所示,此时MySQL数据库启动成功,并且在初始化数据库之后,还需要修改root用户的密码。
(2)恢复周一的完全备份
如上图所示,这是一种导入sql文件到MySQL数据库的方式。
如上图所示,此时MySQL数据库进行周一的完全备份数据恢复。
(3)恢复周二的增量备份
如上图所示,这是MySQL数据库进行周二的增量备份数据恢复。
(4)恢复周三的增量备份
如上图所示,这是MySQL数据库进行周三的增量备份数据恢复。
(5)恢复未备份的数据
如上图所示,从最后一个增量备份文件来看最后的一次事件的终止位置是6797
如上图所示,此时MySQL数据库未备份的数据,可以通过如上方式去进行数据恢复。
将增量备份文件中最后一次事件的终止位置,作为二进制日志文件进行未备份数据的恢复。
四.xtrabackup_完全增量备份
xtrabackup是一个叫做percona开源组织来维护的。
自动帮我记录二进制日志文件的使用信息,方便后续做增量备份和差异备份。
1.安装xtrabackup工具。
如上图所示,这是安装xtrabackup工具,此时这个软件需要的依赖会在我事先配置好的yum源里面去找。
如果从官网下载这个软件的最新版本很可能这个最新版本的软件只适用于centso8.0
如上图所示,软件已经安装好了,并且这个软件需要的依赖也已经自动安装完成。
如上图所示,这个软件给系统提供innobackupex,这个命令来实现物理备份。
2.完全备份
如上图所示,这是使用这个工具进行物理备份的方式。
如上图所示,这个工具默认是在/var/lib/mysql/mysql.sock去找这个套接字文件,但是此时这个MySQL数据库是以源码编译的方式安装的,这个套接字文件在/tmp/下,
如上图所示,此时使用这个物理备份工具进行备份的时候,也会在默认的备份目录下边生成一个相应的文件,
如上图所示,此时可以在这个命令上边指定套接字文件的路径。
这个备份工具会自动帮助我们做很多事情,比如在备份之前自动锁表,在备份完成之后自动解锁表。
如上图所示,使用这个备份工具完成备份之后,会帮我们解锁表,并且会帮助我们记录目前数据库正在使用的日志,还有最后一个事件的位置。
如上图所示,此时会在这个指定目录下边会生成一个以机器当前时间为名称的目录,这个目录下边是备份的数据。
如上图所示,这个文件中保存的就是当时备份所使用的二进制日志的相关信息。