MySQL高级 - 备份与恢复

「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战

为什么要进行数据备份

我们试着想一想,在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新,软件问题可以修复或重新安装,但是如果数据没了呢?对于一些网站、系统来说,数据库就是一切,所以做好数据库的备份是至关重要的!

数据库备份的应用场景

数据备份在很多工作中都是经常会用到的,因为数据容易因为各种原因而丢失,造成数据丢失的原因有哪些呢?

  • 数据丢失应用场景
    • 系统硬件或软件故障
    • 自然灾害,比如水灾、火灾、地震等
    • 黑客攻击,非法访问者故意破坏
    • 误操作,人为的误操作占比最大

image.png

  • 非数据丢失应用场景
    • 开发测试环境数据库搭建
    • 数据库或者数据迁移

数据备份的类型

按照业务方式分

  • 完全备份
    • 将数据库的全部信息进行备份,包括数据库的数据文件、日志文件,还需要备份文件的存储位置以及数据库中的全部对象和相关信息。
  • 差异备份
    • 备份从最近的完全备份后对数据所做的修改,备份完全备份后变化了的数据文件、日志文件以及数据库中其他被修改的内容。
  • 增量备份
    • 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。

image.png

完全备份 差异备份 增量备份
备份方法 备份所有文件 一次全备份后,备份与全备份差异的部分 一次全备份后,备份与上次备份的差异部分
备份速度 最慢 较快 最快
恢复速度 最快 较快 最慢
空间要求 最多 较多 最少
优势 最快的恢复速度,只需要上一次完全备份就能恢复 相比增量,更快也更简单并且只需要最近一次的完全备份和最后一次的差异备份就能恢复 备份速度快,较少的空间需求,没有重复的备份文件
劣势 最多的空间需求大量重复的备份 较慢的备份速度,仍然会存在许多的备份文件 最慢的恢复速度恢复需要最近一次完全备份和全部增量备份

备份的组合方式

  • 完全备份与差异备份

以每周数据备份为例,可以在星期一进行完全备份,在星期二至星期六进行差异备份。如果在星期六数据被破坏了,则只需要还原星期一完全的备份和星期五的差异备份。

这种策略备份数据需要较多的时间,但还原数据使用较少的时间。

image.png

  • 完全备份与增量备份

以每周数据备份为例,在星期一进行完全备份,在星期二至星期六进行增量备份。如果在星期六数据被破坏了,则需要还原星期一正常的备份和从星期二至星期五的所有增量备份。

这种策略备份数据需要较少的时间,但还原数据使用较长的时间。

image.png

MySQL冷备份和热备份

  • 冷备份和热备份指的是,按照数据库的运行状态分类

冷备份

  • 冷备份指的是当数据库进行备份时,数据库不能进行读写操作,即数据库要下线

image.png

冷备份的优点:

  • 是操作比较方便的备份方法(只需拷贝文件)
  • 低度维护,高度安全。

冷备份的缺点:

  • 在实施备份的全过程中,数据库必须要作备份而不能作其它工作。
  • 若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度比较慢慢。
  • 不能按表或按用户恢复。

热备份

  • 热备份是在数据库运行的情况下,备份数据库操作的sql语句,当数据库发生问题时,可以重新执行一遍备份的sql语句。

image.png

热备份的优点:

  • 可在表空间或数据文件级备份,备份时间短。
  • 备份时数据库仍可使用。
  • 可达到秒级恢复(恢复到某一时间点上)。

热备份的缺点:

  • 不能出错,否则后果严重。
  • 因难维护,所以要特别仔细小心,不允许“以失败而告终”。

实战演练

冷备份实战

关闭SELinux

  • 修改selinux配置文件,将SELINUX=enforcing改为SELINUX=disabled,保存后退出
vim /etc/selinux/config
SELINUX=disabled
复制代码
  • 修改后需要重启
reboot # 重启命令
复制代码

找到MySQL数据文件位置,停止MySQL服务

SHOW VARIABLES LIKE '%dir%';

-- 结果显示,数据目录就是datadir的所在位置,即 /var/lib/mysql/

service mysqld stop -- 停止mysql
复制代码

进入到/mysql目录,执行打包命令 将数据文件打包备份

cd /var/lib/ # 进入其上级目录
tar jcvf /root/backup.tar.bz2 mysql/ # 打包压缩到 root目录下
复制代码

删除掉数据目录下的所有数据

-- 删除原目录
rm -rf /var/lib/mysql/
复制代码

恢复数据(使用tar命令)

-- 解压
tar jxvf backup.tar.bz2 mysql/

-- 把备份的文件移动到/var/lib/里面去替代原来的mysql
mv /root/mysql/ /var/lib/
复制代码

启动MySQL,然后登陆MySQL,查看数据是否丢失,如果数据正常代表冷备成功

service mysqld start
复制代码

热备份实战

  • mysqldump备份工具

mysqldump是MySQL数据库用来备份和数据转移的一个工具,一般在数据量很小的时候(几个G)可以用于备份。热备可以对多个库进行备份,可以对单张表或者某几张表进行备份。

  • 备份单个数据库
  1. 创建文件夹,备份数据
[root@localhost ~]# mkdir databackup
[root@localhost ~]# cd databackup
[root@localhost databackup]# mysqldump -uroot -p lagou_edu > lagou_edu.sql
复制代码
  1. 模拟数据丢失,删除数据库,然后重新创建一个新的库
DROP DATABASE lagou_edu;
CREATE DATABASE lagou_edu CHARACTER SET 'utf8';
复制代码
  1. 恢复数据
[root@localhost databackup]cd databackup
[root@localhost databackup]# mysql -uroot -p lagou_edu < lagou_edu.sql
复制代码
  • 备份数据库的某些表
  1. 备份表数据
[root@localhost databackup]# mysqldump -uroot -p lagou_edu course course_lesson
> backupTable.sql
复制代码
  1. 模拟数据丢失,删除数据表
DROP TABLE course;
DROP TABLE course_lesson;
复制代码
  1. 恢复数据
mysql -uroot -p lagou_edu < backupTable.sql
复制代码
  • 直接将MySQL数据库压缩备份
  1. 备份数据
mysqldump -uroot -p lagou_edu | gzip > lagou_edu.sql.gz
复制代码
  1. 模拟数据丢失,删除数据库
DROP DATABASE lagou_edu;
CREATE DATABASE lagou_edu CHARACTER SET 'utf8';
复制代码
  1. 恢复数据
gunzip < lagou_edu.sql.gz | mysql -uroot -p lagou_edu
复制代码

Guess you like

Origin juejin.im/post/7035119480233525262