一、数据库备份的必要性
备份就是为了防止原数据丢失,保证数据的安全。当数据库因为某些原因造成部分或 者全部数据丢失后,备份文件可以帮我们找回丢失的数据。因此,数据备份是很重要 的工作。
常见数据库备份的应用场景如下:
数据丢失应用场景:
- 人为操作失误造成某些数据被误操作
- 软件 BUG 造成部分数据或全部数据丢失
- 硬件故障造成数据库部分数据或全部数据丢失
- 安全漏洞被入侵数据恶意破坏
非数据丢失应用场景:
- 特殊应用场景下基于时间点的数据恢复
- 开发测试环境数据库搭建
- 相同数据库的新环境搭建
- 数据库或者数据迁移
二、MySQL备份类型
根据备份的方法(是否需要数据库离线)可以将备份分为:
- 热备(Hot Backup)
- 冷备(Cold Backup)
- 温备(Warm Backup)
热备份可以在数据库运行中直接备份,对正在运行的数据库操作没有任何的影响,数
据库的读写操作可以正常执行。这种方式在 MySQL 官方手册中称为 Online Backup
(在线备份)。
冷备份必须在数据库停止的情况下进行备份,数据库的读写操作不能执行。这种备份
最为简单,一般只需要复制相关的数据库物理文件即可。这种方式在 MySQL 官方手
册中称为 Offline Backup(离线备份)。
温备份同样是在数据库运行中进行的,但是会对当前数据库的操作有所影响,备份时
仅支持读操作,不支持写操作。
- 按照备份后文件的内容,热备份又可以分为:
- 逻辑备份
- 裸文件备份
在 MySQL 数据库中,逻辑备份是指备份出的文件内容是可读的,一般是文本内容。
内容一般是由一条条 SQL 语句,或者是表内实际数据组成。如 mysqldump 和
SELECT * INTO OUTFILE 的方法。这类方法的好处是可以观察导出文件的内容,一
般适用于数据库的升级、迁移等工作。但其缺点是恢复的时间较长。
裸文件备份是指复制数据库的物理文件,既可以在数据库运行中进行复制(如
ibbackup、xtrabackup 这类工具),也可以在数据库停止运行时直接复制数据文
件。这类备份的恢复时间往往比逻辑备份短很多。
对于跨平台迁移,逻辑备份通常比裸文件备份更方便。这是因为逻辑备份将数据以可读的格式进行备份,可以在不同操作系统和数据库软件之间进行转换和导入。而裸文件备份只能在相同类型的操作系统和数据库软件上进行恢复,如果需要跨平台迁移,就需要先将数据进行转换,才能进行导入。因此,在跨平台迁移时,推荐使用逻辑备份。
- 按照备份数据库的内容来分,备份又可以分为:
- 完全备份
- 部分备份
完全备份是指对数据库进行一个完整的备份,即备份整个数据库,如果数据较多会占 用较大的时间和空间。 部分备份是指备份部分数据库(例如,只备份一个表)
- 部分备份又分为:
- 增量备份
- 差异备份
增量备份需要使用专业的备份工具。也就是说每次备份只会备份自上次备份之后到这次备份的时间之内产生的数据。 因此每次备份都比差异备份节约空间,但是恢复数据麻烦。
差异备份指的是自上一次完全备份以来变化的数据。和增量备份相比,浪费空间,但 恢复数据比增量备份简单。
也就是说,增量备份是,只要数据与上次备份有修改或增加或删除就备份,差异备份是上一次全备份到这次备份之间产生变化就备份
优劣势对比
MySQL 中进行不同方式的备份还要考虑存储引擎是否支持,如 MyISAM 不支持热 备,支持温备和冷备。而 InnoDB 支持热备、温备和冷备。
一般情况下,我们需要备份的数据分为以下几种:
- 表数据
- 二进制日志、InnoDB
- 事务日志
- 代码(存储过程、存储函数、触发器、事件调度器)
- 服务器配置文件
建议的恢复策略:
完全+增量+二进制日志
完全+差异+二进制日志
下面是几种常用的备份工具:
- mysqldump:逻辑备份工具,适用于所有的存储引擎,支持温备、完全备份、部分备份、对于 InnoDB 存储引擎支持热备。
- cp、tar 等归档复制工具:物理备份工具,适用于所有的存储引擎、冷备、完全备份、部分备份。
- lvm2 snapshot:借助文件系统管理工具进行备份。
- mysqlhotcopy:名不副实的一个工具,仅支持 MyISAM 存储引擎。
- xtrabackup:一款由 percona 提供的非常强大的 InnoDB/XtraDB 热备工具,支持完全备份、增量备份。
三、冷备份的备份及恢复
1、先看通用查询日志看是否开启
SHOW VARIABLES LIKE '%general%';
显示OFF没有开启;
2、开启通用查询日志
SET GLOBAL general_log=1;
3、mkdir /backup/ #创建备份目录
4、#打包数据库文件。/var/lib/mysql为数据库文件存放目录
tar -zcvf /backup/mysql_all$(date +%F-%m-%S).tar.zip *
5、查看是否压缩成功
6、开启mysql服务,去删掉指定的数据库
查看数据库;
删除Class_Linux数据库
查看是否删除成功
7、停掉mysql服务,将之前打包的数据库文件压缩包解压到/var/lib/mysql
可以看到被删除的数据库恢复了
8、开启mysql服务,查看Class_Linux数据库是否恢复成功
恢复成功
四、Mysql命令行备份(热备份的逻辑备份)
1、导出特定表的结构 mysqldump -uroot -p -B 数据库名 --table 表名 > xxx.sql
mysqldump -uroot -p --databases Class_Linux > /backup/Class_Linux.sql
2、查看导出的文件
3、登录mysql,删除数据库
查看数据库
删除Class_Linux数据库
查看是否删除成功;
4、导入方法一:通过命令行恢复,(登陆的时候进行导入)
mysql -uroot -p < /backup/Class_Linux.sql
5、查看mysql,数据是否恢复成功
导入方法二:( 在mysql终端下执行)
在mysql终端下执行:
source /backup/Class_Linux.sql
五、通过二进制日志恢复
① 先将Class_Linux库进行逻辑备份
mysqldump -uroot -pNebula@123 -B Class_Linux > /backup/Class_0417.sql
② 查看原先的二进制日志
③ 使用reset master命令将二进制日志重置;
④ 查看二进制日志
⑤ 切到Class_Linux库,给students表进行表的增删改查操作
这里我们插入一条数据:
这时候查看状态,发现Position变了,这时因为进行数据库的修改,position的位置会改变
在将刚刚插入的数据删除:
⑥ 接下来通过二进制文件将数据恢复;
【mysql的二进制文件在/var/lib/mysql目录下】
通过这个命令查看二进制日志详情:
mysqlbinlog -v mysql-bin.000001
在日志的最后可以看见我们刚刚的删除操作:
方法一:按时间恢复
【开始时间可以忽略,因为默认就是日志最开始的时间】
mysqlbinlog -v mysql-bin.000001 --start-datetime='2023-04-17 12:11:12' --stop-datetime='2023-04-17 12:12:41' |mysql -uroot -p
再查看表发现数据恢复了;
方法二:按位置恢复
【开始位置可以忽略,因为默认就是日志最开始的位置】
#删除刚刚恢复的数据
#再查看二进制日志
【注意】这个位置一定是删除这个操作的BEGIN的下面那一行
mysqlbinlog -v mysql-bin.000001 --stop-position=1313 |mysql -uroot -p
再查看表发现数据恢复了;
文章来源:https://www.toymoban.com/news/detail-409881.html
其实我们最开始插入数据,删除数据的时候该操作就已经被记录,第一次按时间恢复数据的操作就相当于又插入了一条数据,我们按位置恢复数据的时候先将刚刚恢复的数据删除,这个操作也有记录,所以二进制日志的内容就是插入>删除>按时间恢复时的插入>删除,所以我们在按位置恢复的时候,可以只写第一次删除数据的位置。文章来源地址https://www.toymoban.com/news/detail-409881.html
到了这里,关于【Linux】Mysql的数据库备份及恢复的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!