6 - 数据备份与恢复|innobackupex

数据备份与恢复|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.mzph.cn/news/609727.shtml

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

相关文章

EPICS scanparm记录和相关软件

概要 本文档描述EPICS scanparm记录&#xff0c;以及构建和使用它所需的相关EPICS软件。此版本的记录兼容EPICS 3.14.8.2&#xff0c;而不兼容任何EPICS 3.13.x版本。 scanparm记录存储了为了将它们写入到EPICS sscan记录的参数&#xff0c;并且项EPICS终端用户提供了一种装载…

Tomcat服务实例部署

目录 **Tomcat 由一系列的组件构成&#xff0c;其中核心的组件有三个&#xff1a;** 什么是 servlet&#xff1f; 什么是 JSP? Tomcat 功能组件结构&#xff1a; Container 结构分析&#xff1a; Tomcat 请求过程&#xff1a; ## Tomcat 服务部署 1.关闭防火墙&#xf…

golang学习-流程控制

if else 建议条件不用()包裹&#xff0c;if{}不能省略&#xff0c;{}中的{必须紧靠着条件 go语言中没有while循环&#xff0c;可以通过for 代替 age : 30if age > 18 {fmt.Println("我是大人")}//另一种写法if age : 99; age > 18 {fmt.Printf("年龄是%v&…

一、数据结构

一、 数组 1.1 数组 定义 遍历 // 遍历数组 传递指针 func traverse() {var b [...]int{1, 2, 3} //长度为3 元素为 1 2 3var ptr &b //ptr是指向数组的指针fmt.Println(b[0], b[1]) // 打印数组的前 2 个元素fmt.Println(ptr[0], ptr[1]) // 通…

UDS统一诊断服务读取DTC信息0X19服务

概念 UDS(Unified Diagnostic Services)统一诊断服务中的0x19服务是用于读取诊断故障代码(DTC,Diagnostic Trouble Code)信息的服务。DTC是车辆故障诊断系统中的重要部分,当车辆发生故障时,相应的DTC会被存储在ECU(电子控制单元)的故障代码存储器中。 0x19服务包含了…

CMake入门教程【核心篇】导出项目库

概述 CMake是一个跨平台的自动化构建系统,它使用配置文件(CMakeLists.txt)来管理软件构建过程。如何使用CMake导出静态库(.a)和动态库(.so/.dll)。 #mermaid-svg-cnd9qfr6rFQgQRNR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fil…

解读MyabtisPlus中的R类(通用响应包装类)

目录 前言1. 概念2. 源码解读3. Demo 前言 大部分R类可以自已手写一个适配的&#xff0c;但MybatisPlus中有专门的R类&#xff0c;于是就使用封装好的类即可 1. 概念 通用R类是一种用于处理API响应的通用响应包装类。 概念含义作用示例用途1.R类是一个泛型类&#xff0c;可…

C/C++汇编学习(六)——数据结构汇编实例:链表、树、图。

我们继续开展 目录 一、链表 1. C代码 2. 链表部分转为汇编并注释 二、树 1. C代码 2. 链表部分转为汇编并注释 3. 汇编伪代码 三、图 1. C代码 2. 汇编伪代码 四、总结 一、链表 1. C代码 #include <iostream>struct ListNode {int data;ListNode* next;…

vue 前端等比例压缩图片(再转换成文件后上传后端)

前端压缩图片总的来说还是转base64 然后等比例放小宽和高 这个是上次压缩图片的一个扩展 压缩完之后 再将base64 转成blob再转成文件然后再上传 一生要强的前端崽子&#xff08;后端不支持base64上传&#xff09; 自己改吧改吧 // 图片上传async changePic(e) {this.isshang…

【Docker】Docker基础

文章目录 安装使用帮助启动命令镜像命令容器命令 安装 # 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 设置存储库 sudo yum install -y yum-utils …

关于git使用的tips

前言 这里是一些git指令使用的tips&#xff0c;如果你作为初学者的话&#xff0c;我认为它将对你有所帮助。 常见指令 常见问题处理 1、使用git clone下载【huggingface.co】资源超时或无法请求问题 绝大多数情况是网络问题&#xff0c;首先如果是比较大的资源&#xff0c;你需…

数据库:如何取消mysql的密码

因为调试MySQL数据接口&#xff0c;总是需要输入密码很烦&#xff0c;所以决定取消mysql的root密码&#xff0c; 网上推荐的有两种方法&#xff1a; 1、mysql命令 SET PASSWORD FOR rootlocalhostPASSWORD(); 2、运行 mysqladmin 命令 mysqladmin -u root -p password …

C# 错误: 集合已修改,可能无法执行枚举操作

出错原因是使用了RemoveAt()函数移除了数据中的某一个数&#xff0c;导致数据发生了错位&#xff08;参考链接一&#xff09; 解决方案&#xff1a; 第一种解决方法&#xff1a;使用for循环 第二种解决方法&#xff1a;调用ToArray()方法&#xff0c;然后再进行foreach循环 …

vue设置height:100vh导致页面超出屏幕可以上下滑动

刚开始设置的height:100vh&#xff0c;就会出现如图的效果&#xff0c;会出现上下滚动 <template><view class"container">......</view> </template><style lang"scss">.container {height: 100vh;} </style> 解决方…

精确掌控并发:分布式环境下并发流量控制的设计与实现(一)

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;10&#xff09;篇。 本篇主要讲清楚常用的并发流量控制方案&#xff0c;包括固定窗口、滑动窗口、漏桶、令牌桶、分布式消息中间件等&#xff0c;以及各种方案在支付系统不同场景下的应用。 在非支付场景&a…

故事机手机平板等智能硬件DVT阶段可靠性测试方法

DVT是什么 DVT是设计样品验证测试评审阶段&#xff0c;这个阶段要进行全面的&#xff0c;客观的测试&#xff0c; 主要测试项目包括&#xff1a;功能测试&#xff0c;安规测试&#xff0c;性能测试&#xff0c;合规测试&#xff08;兼容性&#xff09;&#xff0c;机械测试&am…

QT上位机开发(树形控件在地图软件中的应用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 树形控件还是非常有用的&#xff0c;比如在选择文件的时候、选择目录的时候、以及选择同类型数据中某一个特定选项的时候。当然&#xff0c;对于ca…

JVM工作原理与实战(十一):双亲委派机制

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、双亲委派机制 1.双亲委派机制详解 2.父类加载器 3.双亲委派机制的主要作用 二、双亲委派机制常见问题 总结 前言 ​JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字…

STM32的FMC独立管理和控制外部存储器

在STM32中&#xff0c;FMC&#xff08;Flexible Memory Controller&#xff09;是一个功能强大的外部存储器控制器&#xff0c;用于管理和控制外部存储器设备&#xff0c;如SRAM、SDRAM、NOR Flash等。FMC允许将多个存储器设备连接到微控制器&#xff0c;并通过不同的片选线进行…

LLM之长度外推(一)| 基于位置编码的长度外推研究综述

论文&#xff1a;Length Extrapolation of Transformers: A Survey from the Perspective of Position Encoding地址&#xff1a;https://arxiv.org/abs/2312.17044 Transformer自诞生以来就席卷了NLP领域&#xff0c;因为它具有对序列中复杂依赖关系进行建模的优越能力。尽管基…