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,一经查实,立即删除!

相关文章

【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 …

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;因为它具有对序列中复杂依赖关系进行建模的优越能力。尽管基…

001 Golang-channel-practice

最近在练习并发编程。加上最近也在用Golang写代码&#xff0c;所以记录一下练习的题目。 第一道题目是用10个协程打印100条信息&#xff0c;创建10个协程。每个协程都会有自己的编号。每个协程都会被打印10次。 package mainimport ("fmt""strconv" )func …

[②C++ Boost]: Boost库编译,arm交叉编译方法

前言 Boost是十分实用的C库&#xff0c;如果想在arm环境下使用&#xff0c;就需要自己下载源码编译&#xff0c;本篇博客就记录下Boost库的编译方法。 下载Boost源码 Boost源码的下载路径可以使用&#xff1a;https://sourceforge.net/projects/boost/files/boost/ 编译 …

虚幻UE 材质-材质编辑器节点2

上一篇&#xff1a;虚幻UE 材质-材质编辑器节点 1 上一篇文章对材质编辑器的部分节点做了讲解和对比较常用的功能做了展示 这篇文章继续对上一篇的文章进行补充 文章目录 前言一、ReflectionVector反射向量二、Material Parameter Collection材质参数集三、TwoSideSign和Vertex…

使用 Process Explorer 和 Windbg 排查软件线程堵塞问题

目录 1、问题说明 2、线程堵塞的可能原因分析 3、使用Windbg和Process Explorer确定线程中发生了死循环 4、根据Windbg中显示的函数调用堆栈去查看源码&#xff0c;找到问题 4.1、在Windbg定位发生死循环的函数的方法 4.2、在Windbg中查看变量的值去辅助分析 4.3、是循环…

基于net6的asp.net core webapi项目打包为docker镜像,并推送至私有镜像仓库harbor中

基于net6的asp.net core webapi项目打包为docker镜像&#xff0c;并推送至私有镜像仓库harbor中 0、环境说明1、打包步骤1.1 创建Asp.net core WebApi项目1.2 在Asp.net core WebApi项目根目录下创建Dockerfile文件1.3 在子系统Ubuntu20.04.4中通过docker build生成docker镜像1…

【angular教程240105】02绑定属性 绑定数据、条件判断、加载图片、【ngClass】 【ngStyle】、Angular管道

【angular】02绑定属性 绑定数据、条件判断、加载图片、【ngClass】 【ngStyle】、Angular管道 0 一些基础的概念 标记为可注入的服务 在Angular中&#xff0c;一个服务是一个通常提供特定功能的类&#xff0c;比如获取数据、日志记录或者业务逻辑等。标记为可注入的服务意味着…

PCL 计算异面直线的距离

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,PCL 计算异面直线的距离,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 设置直线 A B AB A

【JVM 基础】 Java 类加载机制

JVM 基础 - Java 类加载机制 类的生命周期类的加载: 查找并加载类的二进制数据连接验证: 确保被加载的类的正确性准备: 为类的静态变量分配内存&#xff0c;并将其初始化为默认值解析: 把类中的符号引用转换为直接引用 初始化使用卸载 类加载器&#xff0c; JVM类加载机制类加载…

nuxt 不解析HTML结构bug

记录一个本人Vue3迁移Nuxt3的报错 报错信息 [Vue warn]: Failed to resolve directive: top [nitro] [unhandledRejection] TypeError: Cannot read properties of undefined (reading ‘getSSRProps’) 原因是Vue3在迁移到nuxt3的时候有一个自定义指令没有搬过来&#xff0…

flutter 打包安卓apk 常用配置

打包之前需要先不配置不然会报错 Execution failed for task ‘:app:mergeReleaseResources’. APP目录下的build.gradleaaptOptions.cruncherEnabled falseaaptOptions.useNewCruncher false如图 配置targetSdkVersion 、minSdkVersion 在android/app/src目录下的build.…