Mysql全量、增量备份与恢复

数据备份的重要性

在生产环境中,数据库的安全性是至关重要的,任何数据库的丢失都可能产生严重的后果
造成数据库丢失的原因
  • 程序错误
  • 人为失误
  • 计算机失败
  • 磁盘失败
  • 灾难

数据库备份的分类1-1

从物理与逻辑的角度,备份可分为

① 物理备份:对对数据库操作系统的物理文件的备份

  • 物理备份又可分为脱机备份(冷备份)和联机备份(热备份)
    冷备份:是在关闭数据库的时候进行
    热备份:数据库处于运行状态,这种备份方法依赖于数据库的日 志文件
    ② 逻辑备份:对数据库逻辑组件的备份

数据库备份的分类1-2

从数据库的备份策略角度,备份可分为
  • 完全备份:每次对数据库进行完整的备份
  • 差异备份:备份那些自从上次完全备份之后被修改过的文件
  • 增量备份:自有哪些在上次完全备份或增量备份之后被修改的文件才会被备份

Mysql完全备份1-1

  • 完全备份是对整个数据库的备份,数据库结构的文件结构的备份
  • 完全备份保存的是备份完成时刻的数据库
  • 完全备份是增量备份的基础

Mysql完全备份1-2

① 完全备份的优点
备份与恢复操作简单方便
② 完全备份的缺点
数据存在大量的重复
占用大量的备份空间
备份与恢复时间长

mysqldump备份数据库

mysql数据库的备份可以采用用多种方式
  • 直接打包数据文件夹,如/usr/local/mysql/data
  • 使用专用备份工具mysqldump
mysqldump命令
  • mysql自带的备份工具,相当方便对MySQL进行备份
  • 通过该命令工具可以将指定的库,表或全部的库导出为sql脚本,在需要恢复时可进行数据恢复

1、mysqldump对单个数据库进行完全备份

mysqldump -uroot -pabc123 mysql > /opt/ccc.sql

Mysql全量、增量备份与恢复_第1张图片

2、mysqldump对多个数据库进行完全备份

 mysqldump -u root -pabc123 --databases school mysql > /opt/aa.sql

在这里插入图片描述

3、mysqldump对所有库进行完全备份

 mysqldump -uroot -pabc123 --opt --all-databases > /opt/bb.sql

在这里插入图片描述

4、mysqldump备份表
在实际生产环境中,存在对某个特定表的维护操作,此时mysqldump同样发挥重大作用

mysqldump -uroot -pabc123 school info > /opt/cc.sql

在这里插入图片描述

5、mysqldump对表中结构进行备份

mysqldump -uroot -pabc123 -d school info > /opt/cc.sql

Mysql全量、增量备份与恢复_第2张图片

6、按日期打包备份

 tar Jcvf /opt/mysql-$(data +%F).tar.xz /usr/local/mysql/data/

在这里插入图片描述

恢复数据

使用mysqldump命令导出的sql备份脚本,在进行数据恢复时可使用一下方法导入
  • source命令
  • mysql命令
使用source恢复数据库的步骤
  • 登录到mysql数据库
  • 执行source备份sql脚本的路径

恢复表的操作

  • 恢复表时同样可以使用source或者mysql命令进行
  • source恢复表的操作与恢复库的操作相同
  • 当备份文件中只包含表的备份,而不包括创建库的语句时,必须指定库命,且目标库必须存在
  • 生产环境中,可以使用shell脚本自动实现定期备份

① source恢复表法
先删除表,假设表丢失
在这里插入图片描述
输入:source /opt/cc.sql 恢复路径
在这里插入图片描述
Mysql全量、增量备份与恢复_第3张图片
Mysql全量、增量备份与恢复_第4张图片

② mysql恢复数据
数据库丢失

在Linux输入:mysql -uroot -pabc123 school < /opt/aa.sql 

在这里插入图片描述
Mysql全量、增量备份与恢复_第5张图片

mysql数据库增量恢复

① 一般恢复

Mysql全量、增量备份与恢复_第6张图片

② 基于位置恢复

就是将某一个起点时间的二进制日志导入数据库中,从而跳过某个发生错误的时间点实现数据恢复

③ 基于时间点恢复

使用基于时间点的恢复,可能会出现一个时间点即同时纯在正确的操作又存在错误的操作,所以我们需要一种更为精确的回复方式

时间点恢复

1、开启二进制日志

#修改配置文件
vim /etc/my.cnf
#重启服务
systemctl restart mysqld

Mysql全量、增量备份与恢复_第7张图片

2、完整备份

mysqldump -uroot -pabc123 school > /opt/school.sql

3、产生增量备份的日志文件
Mysql全量、增量备份与恢复_第8张图片

4、添加字段(正常操作添加字段)
Mysql全量、增量备份与恢复_第9张图片
误删除sti01(误删操作字段)
在这里插入图片描述
在添加字段(正常操作添加字段)
在这里插入图片描述
5、在linux输入:

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 > /opt/bak.txt

Mysql全量、增量备份与恢复_第10张图片
进入vim bak.txt 查看操作记录文件
Mysql全量、增量备份与恢复_第11张图片
Mysql全量、增量备份与恢复_第12张图片
Mysql全量、增量备份与恢复_第13张图片
保存第二次误操作的时间和下一次正常操作的时间
200107 17:36:57
200107 17:37:39

6、进入mysql数据库
删除info
拉取linux里初始保存的shcool.sql文件
Mysql全量、增量备份与恢复_第14张图片
5、在linux
恢复数据到指定时间(注意时间格式!)

mysqlbinlog --no-defaults --stop-datetime='2020-01-07 17:36:57' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -pabc123

Mysql全量、增量备份与恢复_第15张图片

mysqlbinlog --no-defaults --start-datetime='2020-01-07 17:37:39' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -pabc123

Mysql全量、增量备份与恢复_第16张图片

②位置恢复

删除01,02,恢复原始表
Mysql全量、增量备份与恢复_第17张图片
进去vim bak.txt
Mysql全量、增量备份与恢复_第18张图片恢复数据到指定位置

mysqlbinlog --no-defaults --stop-position='568' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -pabc123

Mysql全量、增量备份与恢复_第19张图片

mysqlbinlog --no-defaults --start-position='672' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -pabc123

Mysql全量、增量备份与恢复_第20张图片

你可能感兴趣的:(集群)