6 - 数据备份与恢复|innobackupex

news2025/2/23 10:44:22

数据备份与恢复|innobackupex

  • 数据备份与恢复
    • 数据备份相关概念
      • 物理备份与恢复
      • 逻辑备份(推荐)
      • 使用binlog日志文件实现对数据的时时备份‘
      • 使用日志 恢复数据
  • innobackupex 对数据做备份和恢复
    • 增量备份与恢复

数据备份与恢复

数据备份相关概念

数据备份方式

  • 物理备份 : 直接拷贝数据库目录 (使用的系统命令 cp 或 tar)

  • 逻辑备份: 使用mysql服务提供的命令或安装第三方软件提供的命令,对已有的数据做备份。
    数据备份策略

  • 完全备份 : 备份所有数据

  • 增量备份:备份新数据 每次判断新数据和前一次备份数据比较

  • 差异备份:备份新数据 备份完全备份后新产生的数据 每次判断新数据 都是和完全备份的数据比较 和第一次比
    工作中使用的备份策略:
    完全备份 + 差异备份
    在这里插入图片描述

    完全备份 + 增量备份
    在这里插入图片描述

    每周周一 完全备份
    每周周二~周日 增量备份或差异备份

物理备份与恢复

优点 备份恢复简单
缺点 备份和恢复数据均需要停止数据库服务(若不停止服务也可以备份 但会导致备份不完全)
仅仅适用于同操作系统恢复数据
备份数据量大 浪费存储空间
适合 线下服务器的数据库备份 数据量小的备份

# 拷贝数据库目录
cp -r /var/lib/mysql /bakdir/mysql.bak
# 打包压缩数据库目录
cd /var/lib/mysql/
tar -zcvf /bakdir/mysql.tar.gz ./*

恢复数据

# 停止服务 恢复数据
systemctl stop mysqld
# 清空
rm -rf /var/lib/mysql/*
# 使用备份文件恢复数据
cp -r /bakdir/mysql.bak/* /var/lib/mysql/
# 起服务之前 要更改所有者 所属组
chown -R mysql:mysql /var/lib/mysql/
# 启服务
systemctl start mysqld

逻辑备份(推荐)

使用mysql服务提供的备份命令对数据做备份和恢复
备份和恢复数据不需要停止服务,服务停止反而 备份和恢复不了数据

备份命令格式:

]# mysqldump -uroot -p密码 数据库名 > /备份目录名/文件名.sql
数据库名的表示方式:
库名 表明 例如 tarena user # 对一张表做完全备份
-B 库名 例如 -B tarena # 备份一个库下的所有表
-B 库名1 库名1 例如 -B tarena mysql # 一起备份多个库的所有表
-A 或 --all-databases # 备份一台服务器上的所有数据

恢复命令格式

mysql -uroot -p密码 [库名]< /备份目录名/文件名.sql # 单张表必须写库名

mysqldump 备份时会锁表 使用mysqldump备份文件恢复数据的时候 也会锁表
锁表 就是给表加锁,无论对表做select访问还是insert访问,都不允许
备份或恢复数据操作完成后 会自动释放锁
所以 mysqldump备份时,要赶在访问量少的时候去备份

使用binlog日志文件实现对数据的时时备份‘

介绍: 二进制日志 mysql服务日志文件的一种 (错误日志文件、查询日志文件、man查询日志文件、binlog日志文件)
可用于数据的备份和恢复 配置mysql主从同步的必要条件。
错误日志:

vim /etc/my.cnf
[mysqld]
log-error=/var/log/mysqld.log

binlog日志文件 记录数据发生改变的

  • 启用日志 下图是没启用的
    在这里插入图片描述在这里插入图片描述
vim /etc/my.cnf
server_id=50 # 区分不同主机
log_bin

自定义日志文件位置

vim /etc/my.cnf
server_id=50 # 区分不同主机
# log_bin
log-bin=/mylog/db50 # 指定日志目录及名称

查看日志文件的内容

vim /mylog/db50.000001
mysqlbinlog /mylog/db50.000001

与binlog日志相关的管理命令
手动创建新的日志文件(默认是日志文件大于1G)

# 刷新日志
flush logs;
等效于
mysql -uroot -pNSD2107...a -e 'flush logs'

在这里插入图片描述
只要重启服务 就会生成新的日志文件

systemctl restart mysqld
mysqldump -uroot -pNSD2107...a --flush-log -B tarena > /root/tarena.sql
删除已有的binlog日志文件
	使用sql命令
show master status; # 查看正在使用的日志
show binary logs; # 查看已有的日志文件
purge master logs to "db50.000005"; #  删除日志文件

使用日志 恢复数据

  • 使用日志恢复所有数据 (所有日志文件命令)
mysqlbinlog /目录名/日志文件名 | mysql -uroot -p密码
  • 使用日志恢复部分数据(执行日志文件记录的指定访问的sql命令)
mysqlbinlog 选项 /目录名/日志文件名 | mysql -uroot -p 密码
# 时间范围选项
起始时间 --start-datetime=""
结束时间 --stop-datetime=""
# 偏移量范围选项
起始偏移量 --start-position=偏移量数字
结束偏移量 --stop-position=偏移量数字

# 查看日志文件当前格式
show variables like "binlog_format"; 

在这里插入图片描述
在这里插入图片描述
修改日志文件记录sql命令的格式

vim /etc/my.cnf
[mysql]
server_id=50
log_bin=db50
binlog_format="mixed" # 指定日志格式

实验环境

mysql> reset master;
mysql> show master status;
create database db51;
create table db51.user(name char(5),class char(7));
insert into db51.user values("a","b");
insert into db51.user values("a","b");
insert into db51.user values("a","b");

# 查看日志
show master status;

使用binlog日志文件恢复数据
在这里插入图片描述

mysql -uroot -pNSD2107...a -e "select * from db51.user"

准备环境

show master status;
delete from db51.user;
select * from db51.user;
show master status;
insert into db51.user values("f","f");
insert into db51.user values("e","e");
show master status;

------------
scp /mylog/db50.000001 root@192.168.4.51:/opt/
在host51执行日志里 记录的指定范围的命令 恢复数据
	第一步 查看要执行的sql对应起始时间或起始偏移量
	mysqlbinlog /opt/db50.000001
	第二步 指定偏移量的访问 恢复数据
	mysqlbinlog --start-position=2019 --stop-position=2435 /opt/db50.000001 | mysql -uroot -pNSD2107...a
	第三步 查看数据是否恢复成功
在host50 使用binlog日志恢复删除的数据
mysql > show binlog events in "db50.000001";

在这里插入图片描述

innobackupex 对数据做备份和恢复

在线热备不锁表 适合生产环境下备份业务。 恢复数据时 必须清空数据库目录(rm -rf /var/lib/mysql/*)
安装

yum -y install libev percona-xtrabackup

数据完全备份与恢复 (对数据安全备份也不锁表)

# 备份数据命令格式
innobackupex -uroot -p密码 /备份目录名 --no-timestamp 
--np-timestamp 可选项 不用系统的日期做存放备份文件的目录名
准备恢复数据
	innobackupex --apply-log /备份目录名
拷贝数据
	innobackupex --copy-back /备份目录名
# 恢复数据命令操作
1.停止数据库服务
2.清空数据库目录
3.准备恢复数据
4.拷贝数据
5.修改数据库目录的所有者所属组为mysql
6.启动数据库服务
7.管理员root用户登陆服务查看数据

实验

mysql > create table db51.user2 select * from db51.user;
mysql > db51;
mysql > show tables 

# innobackupex -uroot -pNSD2017...a /allbak --no-timestamp

在这里插入图片描述

# 恢复数据命令操作
1.停止数据库服务
systemctl stop mysqld
2.清空数据库目录
rm -rf /var/lib/mysql/*
3.准备恢复数据
innobackupex --apply-log /allbak/
4.拷贝数据
innobackupex --copy-back /allbak/
5.修改数据库目录的所有者所属组为mysql
chown -R mysql:mysql /var/lib/mysql
6.启动数据库服务
systemctl start mysqld
7.管理员root用户登陆服务查看数据
mysql -uroot -pxxx -e 'select * from db51.'

使用完全备份文件 恢复一张表的数据
在这里插入图片描述

  1. 删除表空间(表名.ibd 用来存放表记录的文件)
    就是吧数据库目录下没有记录的表名.idb文件删除
    alter table 库名.表名 discard tablespace;
    
  2. 导出表信息 (生成备份目录下备份数据的信息文件)
innobackupex --apply-log --export 数据库完全备份目录
  1. 拷贝表心中文件到数据库目录下
    在这里插入图片描述
  2. 修改表信息文件的所有者及组用户
chown mysql:mysql /var/lib/mysql/db51/user2.*
  1. 导入表空间
alter table db51.user2 import tablespace;
  1. 删除数据库目录下的表信息文件
rm -rf /var/lib/mysql/db51/user2.cfg
rm -rf /var/lib/mysql/db51/user2.exp
  1. 查看表记录
select * from db51.user2;

增量备份与恢复

增量备份是备份上次备份后新产生的数据,所以在执行增量备份之前,必须得先有一次备份
增量备份数据命令格式

]# innobackupex -uroot -p密码 --incremental /目录名 --incremental-basedir=/目录名 --no-timestamp
--incremental 备份新数据并定义新数据存放的目录名
--incremental-basedir 备份新数据参考的备份目录名

增量恢复数据命令格式

--incremental-dir 增量备份数据存放的目录名
innobackupex --apply-log --redo-only /首次备份目录名 --incremental-dir=/目录名 # 准备恢复数据

使用增量备份文件恢复数据的具体步骤

  1. 停止数据库服务
systemctl stop mysqld
  1. 清空数据库目录
rm -rf /var/lib/mysql/*
  1. 准备恢复数据(告诉程序从什么位置开始备份)
innobackupex --apply-log --redo-only /fullbak/
  1. 合并数据(合并的次数要增量备份的次数一样 并且合并的顺序也要与增量备份的顺序一致)
innobackupex --apply-log --redo-only /fullbak/ --incremental-dir=/newldir # 合并第一次增量备份数据

在这里插入图片描述
5. 恢复数据 (合并后的数据拷贝到数据库目录下)

innobackupex --copy-back /fullbak
  1. 修改数据库目录的所有者和组用户为mysql
chown -R mysql:mysql /var/lib/mysql
  1. 启动服务
systemctl start mysqld
  1. 查看数据
    案例
    周一 执行完全备份
innobackupex -uroot -pxxxx /fullbak --no-timestamp

周二 执行增量备份

innobackupex -uroot -pxxx --incremental /newdir --incremental-basedir=/fullbak --no-timestamp

周三 执行增量备份

innobackupex -uroot -pxxx --incremental /newdir2 --incremental-basedir=/newdir --no-timestamp
如果做差异备份 参考的目录应该是/fullbak

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1370694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[uniapp] uni-ui+vue3.2小程序评论列表组件 回复评论 点赞和删除

先看效果 下载地址 uni-app官方插件市场: cc-comment组件 环境 基于vue3.2和uni-ui开发; 依赖版本参考如下: "dependencies": {"dcloudio/uni-mp-weixin": "3.0.0-3090820231124001","dcloudio/uni-ui": "^1.4.28","…

提升测试多样性,揭秘Pytest插件pytest-randomly

大家可能知道在Pytest测试生态中&#xff0c;插件扮演着不可或缺的角色&#xff0c;为开发者提供了丰富的功能和工具。其中&#xff0c;pytest-randomly 插件以其能够引入随机性的特性而备受欢迎。本文将深入探讨 pytest-randomly 插件的应用&#xff0c;以及如何通过引入随机性…

Ubuntu设置国内镜像源

文章目录 环境背景方法1&#xff1a;使用清华大学镜像源使用HTTP方式使用HTTPS方式 方法2&#xff1a;使用阿里云镜像源总结参考 环境 RHEL 9.3Docker Community 24.0.7ubuntu:latest Docker image (jammy 22.04) 背景 启动Ubuntu容器&#xff1a; docker run -it ubuntu在…

2024,给管理者的三点建议

2024年&#xff0c;随着市场变化日新月异&#xff0c;各行各业竞争愈演愈烈&#xff0c;很多企业越发注重内部管理工作&#xff0c;管理者面临压力是必然的。在这样的情境下&#xff0c;作为管理者&#xff0c;应该怎么办呢&#xff1f;华恒智信根据多年的管理咨询服务经验&…

【2024系统架构设计】 系统架构设计师第二版-通信系统架构设计理论与实践

目录 一 通信系统网络架构 二 网络构建的关键技术 三 网络构建和设计方法 四 案例分析 注:本节内容可作为知识储备,做一个基本的了解即可。

Opencv实验合集——实验九:姿势估计

在上一章节(相机校准)&#xff0c;你已经找到了相机矩阵&#xff0c;畸变系数等等参数。给出一个图案图像&#xff0c;我们便可以利用上面的信息用于计算其姿势&#xff0c;或者物体在空间中位于何处&#xff0c;比如如何旋转&#xff0c;如何移动等等问题。对于一个平面物体&a…

Google Breakpad使用方法

源码下载地址&#xff1a;https://chromium.googlesource.com/breakpad/breakpad 依赖头文件下载地址&#xff1a; https://chromium.googlesource.com/linux-syscall-support Breakpad由三个主要组件&#xff1a; client 是一个库, 以library的形式内置在应用中&#xff0c…

Mongodb使用指定索引删除数据

回顾Mongodb删除语法 db.collection.deleteMany(<filter>,{writeConcern: <document>,collation: <document>,hint: <document|string>} ) 删除语法中&#xff0c;除了指定过滤器外&#xff0c;还可以指定写入策略&#xff0c;字符序和使用的索引。 …

分布式系统架构设计之分布式消息队列中间件的技术选型报告

1、主流消息队列中间件 01 Kafka 基本原理 Kafka 基于发布-订阅模式&#xff0c;它维护了一个或多个 Topic&#xff0c;生产者将消息发送到 Topic&#xff0c;消费者从 Topic 中读取消息。Kafka 强调高吞吐量&#xff0c;通过批量处理、顺序 I/O 和零拷贝等技术实现高性能 …

【算法Hot100系列】搜索插入位置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

从起高楼到楼塌了的中台战略 —— 业务中台、数据中台、技术中台

目录 一. 前言 二. 中台能力总体框架 三. 业务中台 四. 数据中台 五. 技术中台 5.1. API 网关 5.2. 开发框架 5.3. 微服务治理 5.4. 分布式数据库 5.5. 数据处理组件 六. 阿里拆中台的原因和意义 七. 总结 一. 前言 中台是近年来互联网行业的一个热门话题。它最早是…

【STM32】| 01——常用外设 | USART

系列文章目录 【STM32】| 01——常用外设 | USART 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 前言1. 基础理论1.1 并行通信和串行通信1.2 同步通信和异步通信1.3 单工/半双工/全双工1.4 电平信号(RS232/TTL)和差分信号(RS485)1.5 端口(COM) 2. 串口理论2.1 串口物理…

基于apache的http文件服务配置

背景&#xff1a; 公司的产品使用的第三方模组可以OTA&#xff0c;厂家提供的是window开启软件&#xff0c;这样就可以在本机做http下载服务器&#xff0c;然后使用端口映射的方式&#xff0c;公开到外网&#xff0c;这样就可以进行4G网络访问内网服务器了。但这个有个弊端&am…

【C++】—— 工厂模式详解

目录 &#xff08;一&#xff09;工厂模式的特点 &#xff08;二&#xff09;工厂模式分类 1、简单工厂模式 2、工厂方法模式 3、抽象工厂模式 &#xff08;三&#xff09;总结与回顾 &#xff08;一&#xff09;工厂模式的特点 1、优势 ⼯⼚模式是⼀种创建型设计模式&a…

【大数据进阶第三阶段之Hue学习笔记】Hue的安装和使用

1、 Hue的安装 1.1 上传解压安装包 Hue的安装支持多种方式&#xff0c;包括rpm包的方式进行安装、tar.gz包的方式进行安装以及cloudera manager的方式来进行安装等&#xff0c;我们这里使用tar.gz包的方式来进行安装 Hue的压缩包的下载地址&#xff1a; http://archive.cloude…

C++|19.C++类与结构体对比

类和结构体 类和结构体本质上并没有太大区别。 但两者在默认上有所区别。 类默认成员变量是私有的&#xff0c;而结构体默认成员变量是公有的。 也就是说&#xff0c;对于一个类来说&#xff0c;会默认使用private去保护其内部成员变量使得无法直接访问到其内部的变量。 同时从…

CANoe中的AutoSequence

简单介绍&#xff1a; AutoSequence是一种简单的&#xff0c;快速的类似脚本的一个可视化自动脚本插件。使用起来非常方便&#xff0c;甚至在很多时候能够代替一些简单的脚本。 1&#xff1a;Automation工程的创建 &#xff08;1.1&#xff09;打开Automation插件,双击这个插…

TypeScript进阶(一)深入理解类和接口

✨ 专栏介绍 TypeScript是一种由微软开发的开源编程语言&#xff0c;它是JavaScript的超集&#xff0c;意味着任何有效的JavaScript代码都是有效的TypeScript代码。TypeScript通过添加静态类型和其他特性来增强JavaScript&#xff0c;使其更适合大型项目和团队开发。 在TypeS…

【2024最新-python3小白零基础入门】No2.python基础语法

文章目录 1 编码2 标识符规则3 python保留字4 注释5 行与缩进6 多行语句7 数字(Number)类型8 字符串(String)9 空行10 等待用户输入11 同一行显示多条语句12 import 与 from...import 环境准备&#xff0c;打开pycharm,新建一个python文件 文件名称随便&#xff0c;可中文可英文…

golang 记录一次协程和协程池的使用,利用ants协程池来处理定时器导致服务全部阻塞

前言 在实习的项目中有一个地方遇到了需要协程池的地方&#xff0c;在mt推荐下使用了ants库。因此在此篇记录一下自己学习使用此库的情况。 场景描述 此服务大致是一个kafka消息接收、发送相关。接收消息&#xff0c;根据参数设置定时器进行重发。 通过这里新建kafka服务&a…