MySQL数据库的备份与恢复(中)

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 一、数据备份的重要性备份的主要目的是灾难恢复。在生产环境中,数据的安全性至关重要。任何数据的丢失都可能产生严重的后果。

六、MySQL增量备份与恢复


6.1 MySQL增量备份介绍

使用mysqldump进行完全备份存在的问题

  • 备份数据中有重复数据
  • 备份时间与恢复时间过长

增量备份是什么:

  • 是自上一次备份后增加/变化的文件或者内容

增量备份的特点

  • 没有重复数据,备份量不大,时间短
  • 恢复需要上次完全备份及完全备份之后所有的增量备份才 能恢复,而且要对所有增量备份进行逐个反推恢复

6.2 MySQL增量备份的方法

  • MySQL没有提供直接的增量备份方法
  • 可通过MySQL提供的二进制日志间接实现增量备份
  • MySQL二进制日志对备份的意义
  • 二进制日志保存了所有更新或者可能更新数据库的操作
  • 二进制日志在启动MySQL服务器后开始记录,并在文件达到 max_binlog_size所设置的大小或者接收到flush logs命令后重新 创建新的日志文件
  • 只需定时执行flush logs方法重新创建新的日志,生成二进制文 件序列,并及时把这些日志保存到安全的地方就完成了一个时间 段的增量备份

6.3 MySQL数据库增量恢复

  • 一般恢复
  • 将所有备份的二进制日志内容全部恢复
  • 基于位置恢复
  • 数据库在某一时间点可能既有错误的操作也有正确的操作
  • 可以基于精准的位置跳过错误的操作
  • 基于时间点恢复
  • 跳过某个发生错误的时间点实现数据恢复


七、增量备份与恢复 操作演示


7.1 增量备份

1、开启二进制日志功能

vim /etc/my.cnf
 [mysqld]
 log-bin=mysql-bin    #开启二进制日志。如果使用相对路径,则保存在/usr/local/mysql/data/目录下
 binlog_format = MIXED     #可选,指定二进制日志(binlog)的记录格式为MIXED
 server-id = 1
 systemctl restart mysqld
 ls -l /usr/local/mysql/data/mysql-bin.*
 -------------- 以下是注释 -----------------
 #二进制日志(binlog)有3种不同的记录格式: 
 STATEMENT (基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT
 STATEMENT (基于SQL语句):记录修改的sql语句。高并发的情况下,记录操作的sql语句时可能顺序会有错误,导致恢复数据时,数据丢失或有误差。效率高,但数据可能有误差。
 ROW(基于行):记录每一行数据,准确,但恢复时效率低。
 MIXED(混合模式):正常情况下使用STATEMENT,高并发的情况下会智能地切换到ROW。
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


2、可每周对数据库或表进行完全备份

mysqldump -u root -p yuji class > /bak/yuji_class_$(date +%F).sql
 mysqldump -u root -p --databases yuji > /bak/yuji_$(date +%F).sql
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


3、可每天进行增量备份操作,生成新的二进制日志文件(例如mysql-bin.000002)

mysqladmin -u root -p flush-logs
复制代码


网络异常,图片无法展示
|


4、插入新数据,以模拟数据的增加或变更

use yuji;
 insert into class values(3, '吉他') ;
 insert into class values(4, '二胡') ;
复制代码


网络异常,图片无法展示
|


5、再次生成新的二进制日志文件(例如mysql -bin.000003)

mysqladmin -u root -p flush-logs
 #之前的步骤4的数据库操作会保存到mysql-bin.000002文件中,之后数据库数据再发生变化则保存在mysql-bin.00003文件中
复制代码


网络异常,图片无法展示
|


6、查看二进制日志文件的内容

cp /usr/local/mysql/data/mysql-bin.000002 /bak/
 mysqlbinlog --no-defaults --base64-output=decode-rows -v /bak/mysql-bin.000002
 #--base64-output=decode-rows:使用64位编码机制去解码并按行读取
 #-v:显示详细内容
复制代码


网络异常,图片无法展示
|


7.2 增量恢复

  • 一般恢复
  • 将所有备份的二进制日志内容全部恢复
  • 基于位置恢复
  • 数据库在某一时间点可能既有错误的操作也有正确的操作
  • 可以基于精准的位置跳过错误的操作
  • 基于时间点恢复
  • 跳过某个发生错误的时间点实现数据恢复

7.2.1 一般恢复

将所有备份的二进制日志内容全部恢复。

1、模拟丢失更改的数据的恢复步骤。

use yuji;
 delete from class where cid=3;   #删除今天新增加的两条数据
 delete from class where cid=4;
 #增量恢复(今天新增加的两条数据记录保存在mysql-bin.000002日志中)
 mysqlbinlog --no-defaults /bak/mysql-bin.000002 | mysql -u root -p
 mysql -u root -p -e 'select * from yuji.class;'   #查看表中数据
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


2、模拟丢失表中所有数据的恢复步骤。

mysql -u root -p -e 'drop table yuji.class;'   #删除整个class表
 mysql -u root -p -e 'show tables from yuji;'   #查看yuji库中的表
 #先完全恢复历史数据
 mysql -u root -p yuji < /bak/yuji_class_2022-06-05.sql  
 #再进行增量恢复今天新增的2条数据(mysql-bin.000002日志中保存了今天新增加的两条数据记录)
 mysqlbinlog --no-defaults /bak/mysql-bin.000002 | mysql -u root -p
 mysql -u root -p -e 'select * from yuji.class;'   #查看表中数据
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


7.2.2 断点恢复

向class表中插入4条数据,之后刷新二进制日志,移动前一个日志:

use yuji;
 insert into class values(5,'竹笛');
 insert into class values(6,'古琴');
 insert into class values(7,'小号');
 insert into class values(8,'长号');
 mysqladmin -u root -p flush-logs        #刷新日志,生成新的二进制日志
 cp /usr/local/mysql/data/mysql-bin.000003 /bak/   #将前一个日志复制到/bak/目录下
 mysqlbinlog --no-defaults --base64-output=decode-rows -v /bak/mysql-bin.000003 > /bak/binlog.txt  #将二进制文件内容重定向到binlog.txt文件中
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|




网络异常,图片无法展示
|
网络异常,图片无法展示
|


1)基于位置的断点恢复

mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql -u root -p
 #从某一个位置点开始恢复,一直到日志结尾
 mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql -u root -p
 #从日志开头,一直恢复到某一个位置点前结束
 mysqlbinlog --no-defaults --start-position='xxx'--stop-position='位置点' 文件名 | mysql -u root -p
 #从某一个位置点开始恢复,一直到某一个位置点前结束
复制代码


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
关系型数据库 MySQL 数据库
rds备份与恢复
rds备份与恢复
28 3
|
1月前
|
关系型数据库 MySQL 数据库
Python tk dos命令备份mysql数据库
Python tk dos命令备份mysql数据库
16 0
|
8天前
|
SQL 关系型数据库 MySQL
mysql怎么备份
mysql怎么备份
59 7
|
3天前
|
关系型数据库 MySQL Linux
Linux环境下定时备份mysql数据库
Linux环境下定时备份mysql数据库
|
4天前
|
数据库 对象存储 数据安全/隐私保护
在oceanbase数据库中,有没有遇到备份到oss环境,备份进度到98%就一直卡着的问题?
在oceanbase数据库中,有没有遇到备份到oss环境,备份进度到98%就一直卡着的问题?
13 6
|
8天前
|
关系型数据库 MySQL 数据安全/隐私保护
百度搜索:蓝易云【mysql在执行innobackupex增量备份时报错cannot open *****/xtrabackup_checkpoints】
如果以上方法都不能解决问题,建议检查其他错误日志或报错信息,以进一步确定问题的原因,并采取相应的措施进行修复。备份和恢复过程中的错误处理是保证数据安全的关键,务必谨慎处理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
16 2
|
10天前
|
存储 关系型数据库 MySQL
mysql怎么备份
mysql怎么备份
13 7
|
11天前
|
SQL 存储 关系型数据库
备份数据库
备份数据库
16 9
|
17天前
|
监控 容灾 安全
规划阿里云RDS跨区迁移并构建容灾与备份策略
规划阿里云RDS(Relational Database Service)跨区迁移并构建容灾与备份策略
15 2
|
18天前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表11、日志和备份——1、查看日志——2、数据备份和恢复(mysqldump, mysqlbinlog)
MySQL技能完整学习列表11、日志和备份——1、查看日志——2、数据备份和恢复(mysqldump, mysqlbinlog)
24 0

热门文章

最新文章