6 - 数据备份与恢复|innobackupex

2024-01-10

数据备份与恢复

数据备份相关概念

数据备份方式

  • 物理备份 : 直接拷贝数据库目录 (使用的系统命令 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

6 - 数据备份与恢复|innobackupex 的相关文章

随机推荐

  • 心灵与计算机:解密情感处理

    1 背景介绍 情感处理是人工智能领域中一个重要的研究方向 它旨在使计算机能理解 识别和处理人类的情感 情感处理的主要应用包括情感分析 情感识别 情感挖掘等 随着大数据 深度学习和自然语言处理等技术的发展 情感处理技术已经取得了显著的进展 然
  • 【强推荐】如何生成正式签名的APK文件

    在本篇文章您将了解到两种生成正式签名的APK文件 当然还会了解到 gradle build 与 gradle assemble 的区别 通过 Android Studio 生成 使用 Gradle 生成 文章目录 前言 使用Android
  • 【软件测试】学习笔记-脚本与数据的解耦 + Page Object模型

    本篇文章介绍GUI测试中两个非常重要的概念 测试脚本和数据的解耦 以及页面对象 Page Object 模型 测试脚本和数据的解耦 GUI自动化测试适用的场景 尤其适用于需要回归测试页面功能的场景 如果在测试脚本中硬编码 hardcode
  • 太阳诱电 | 陶瓷电容器的静电容量相关

    陶瓷电容器的静电容量会因温度而变化吗 电容器的静电容量的温度特性是什么 陶瓷电容器的静电容量随周围的温度而变化 静电容量因温度而变化的现象 称为静电容量的温度特性 这是由于陶瓷电容器使用的材料造成的 也是所有陶瓷电容的常有现象 以下是本公司
  • 印象深刻的实战经历——Android 如何生成多渠道文件

    作者简介 小曾同学 com 一个致力于测试开发的博主 主要职责 测试开发 CI CD 如果文章知识点有错误的地方 还请大家指正 让我们一起学习 一起进步 座右铭 不想当开发的测试 不是一个好测试 如果感觉博主的文章还不错的话 还请点赞 收藏
  • CCSC,一种CPU架构

    core circuit separate computer 核与执行电路的分离 最初是为了省电 用寄存器实现这种分离 V寄存器控制着执行电路的供电 V 0则不供电 进入省电模式 V 1则供电 进入工作模式 P寄存器是parameter r
  • 慢思维大脑:SOP流程的心理学背景

    1 背景介绍 慢思维大脑 SOP流程的心理学背景 慢思维是指人类大脑在处理复杂问题 做出重要决策时所采用的思考方式 它与快速 自动的快思维相对 主要通过以下几种方式表现 深入思考 慢思维会让人类大脑深入思考问题的本质 从而找出更深层次的解决
  • SpiderFlow爬虫平台 前台RCE漏洞复现(CVE-2024-0195)

    0x01 产品简介 SpiderFlow是新一代爬虫平台 以图形化方式定义爬虫流程 以流程图的方式定义爬虫 不写代码即可完成爬虫 是一个高度灵活可配置的爬虫平台 0x02 漏洞概述 SpiderFlow爬虫平台src main java o
  • sentinel熔断简单实现

    sentinel详细介绍网址 基于qps限流 package main import fmt sentinel github com alibaba sentinel golang api github com alibaba sentin
  • 基于机器学习的投资组合推荐系统+源代码+文档说明+演示视频

    文章目录 源码下载地址 项目介绍 界面预览 项目备注 毕设定制 咨询 源码下载地址 源码下载地址 点击这里下载源码 项目介绍 界面预览
  • AI大模型应用入门实战与进阶:如何训练自己的AI模型

    1 背景介绍 人工智能 Artificial Intelligence AI 是计算机科学的一个分支 旨在模拟人类智能的能力 包括学习 理解自然语言 识别图像和视频 进行决策等 随着数据量的增加和计算能力的提升 人工智能技术的发展得到了巨大
  • AI大模型应用入门实战与进阶:从AI模型应用到商业转化

    1 背景介绍 人工智能 AI 已经成为当今世界最热门的技术话题之一 其在各个领域的应用也不断拓展 大型AI模型是人工智能领域的核心 它们在自然语言处理 图像识别 语音识别等方面的表现力和性能都有着重要的作用 然而 如何将这些大型AI模型应用
  • gazebo(fortress) set the path of sdf file

    This method only satisfied with gazebo fortress not harmenic
  • 流程管理的未来:人工智能如何改变业务运行

    1 背景介绍 流程管理是企业在实现业务目标时所采取的一系列有序 连贯的活动 它涉及到许多领域 如生产 销售 研发 财务等 随着企业规模的扩大和市场竞争的激烈 流程管理的复杂性也不断增加 人工智能 AI 技术的发展为流程管理提供了新的机遇 有
  • 人工智能与模式识别的社会影响与应用

    1 背景介绍 人工智能 Artificial Intelligence AI 和模式识别 Pattern Recognition PR 是计算机科学领域的两个重要分支 人工智能研究如何让计算机具有类似人类智能的能力 如学习 推理 理解自然语
  • 线性代数在深度学习中的角色

    1 背景介绍 深度学习是一种人工智能技术 它主要通过神经网络来学习和模拟人类大脑的思维过程 线性代数是一门数学分支 它研究的是向量和矩阵的运算 在深度学习中 线性代数起着非常重要的作用 因为它为神经网络提供了数学模型和计算方法 在这篇文章中
  • 慢思维的力量:如何解决复杂问题

    1 背景介绍 在当今的快速发展和竞争激烈的环境中 我们需要更有效地解决复杂问题 这需要我们具备一种称为慢思维的思考方式 它可以帮助我们更好地理解问题 制定更好的解决方案 本文将介绍慢思维的核心概念 算法原理 具体操作步骤以及数学模型公式 并
  • 强化学习求解TSP(二):Qlearning求解旅行商问题TSP(提供Python代码)

    一 Qlearning简介 Q learning是一种强化学习算法 用于解决基于奖励的决策问题 它是一种无模型的学习方法 通过与环境的交互来学习最优策略 Q learning的核心思想是通过学习一个Q值函数来指导决策 该函数表示在给定状态下
  • 线性代数在数据挖掘中的应用

    1 背景介绍 线性代数是数学的一个分支 主要研究的是线性方程组和向量的相关概念和方法 在数据挖掘领域 线性代数的应用非常广泛 包括数据处理 特征提取 模型训练等方面 本文将从以下几个方面进行阐述 背景介绍 核心概念与联系 核心算法原理和具体
  • 6 - 数据备份与恢复|innobackupex

    数据备份与恢复 innobackupex 数据备份与恢复 数据备份相关概念 物理备份与恢复 逻辑备份 推荐 使用binlog日志文件实现对数据的时时备份 使用日志 恢复数据