当前位置: 首页 > news >正文

【MySQL备份】Percona XtraBackup加密备份实战篇

目录

 1.前言

2.准备工作

2.1.环境信息

2.2.配置/etc/my.cnf文件 

 2.3.授予root用户BACKUP_ADMIN权限

 2.4.生成加密密钥

 2.5.配置加密密钥文件

3.加密备份 

4.优化加密过程

5.解密加密备份

 6.准备加密备份

 7.恢复加密备份

7.1.使用rsync进行恢复

 7.2.使用xtrabackup命令恢复

8.总结


"实战演练:利用Percona XtraBackup执行MySQL加密备份操作详解"

 1.前言

继探索了【MySQL备份】Percona XtraBackup压缩备份实战篇后,本文将进一步深入,揭开Percona XtraBackup加密备份的神秘面纱,解锁数据安全的高级实践策略。

在数据保护日益重要的今天,仅仅实现备份是不够的,确保备份数据的私密性和安全性成为新的挑战。Percona XtraBackup,这一MySQL备份领域的佼佼者,不仅以其快速、高效著称,还内置了强大的加密功能,为你的数据库备份穿上坚不可摧的防护盔甲。本篇文章将引领你步入加密备份的实战殿堂,细致剖析如何在Percona XtraBackup中实施加密备份,为敏感信息构建一道坚固的安全防线。

我们不仅会介绍如何启用加密选项,选用合适的加密算法(如AES128、AES192、AES256)来为备份过程加码,还会深入讨论密钥管理的策略与实践,确保加密密钥如同保险箱的钥匙,既强大又安全地守护着你的数据宝藏。同时,考虑到实际操作中的效率与安全性平衡,文中还将涵盖并行加密技术的应用,让你在享受加密带来的安全保障的同时,也能保持备份的高效性。

此外,文章还将指导你如何在需要时,正确且安全地利用之前加密的备份进行数据恢复,确保在任何紧急情况下,都能迅速且无缝地恢复数据,让业务连续性得到最强有力的保障。

总之,本文不仅是对Percona XtraBackup加密备份功能的一次全面梳理,更是一份实战手册,旨在帮助你掌握高级数据保护技能,无论面对何种威胁,都能确保数据的绝对安全。让我们一起深入探究,为你的数据库备份战略增添一份不容忽视的安全力量。

2.准备工作

2.1.环境信息

主机IP操作系统Mysql版本XtraBackup版本
172.17.0.2CentOS Stream release 98.0.378.0.35

2.2.配置/etc/my.cnf文件 

[xtrabackup]
host=localhost
port=3306
user=root
password=123456
socket=/var/lib/mysql/mysql.sock

 2.3.授予root用户BACKUP_ADMIN权限

grant BACKUP_ADMIN on *.* to 'root'@'%'

 LOCK INSTANCE FOR BACKUP 是MySQL 8.0引入的一种新的备份相关SQL语句,主要用于在进行数据库备份时,以一种更为细粒度和高效的方式控制对数据库实例的访问,以保证备份的一致性。这个命令的工作原理及特点如下:

目的:在执行备份操作时,此命令用于获取一个实例级别的锁,该锁允许在备份过程中继续执行DML(数据操作语言,如INSERT、UPDATE、DELETE)操作,同时防止那些可能导致数据快照不一致的DDL(数据定义语言,如CREATE、ALTER、DROP)操作和某些管理操作。这样可以在不影响数据库服务的情况下进行备份,特别适用于需要最小化服务中断的在线备份场景。

权限需求:执行LOCK INSTANCE FOR BACKUP语句需要用户具备BACKUP_ADMIN权限。这是一个专门为了备份相关的高级操作而设计的权限级别。

兼容性:此特性是在MySQL 8.0及以上版本中引入的,早于8.0的MySQL版本并不支持这一语句,因此在使用旧版本时,可能需要依赖其他机制(如FLUSH TABLES WITH READ LOCK)来确保备份的一致性。

解锁:执行备份后,需要使用UNLOCK INSTANCE语句来释放之前由LOCK INSTANCE FOR BACKUP获得的锁,从而恢复正常操作。

与传统备份命令的对比:相比于传统的备份方法,如使用FLUSH TABLES WITH READ LOCK,LOCK INSTANCE FOR BACKUP提供了更小的性能影响,因为它不会完全阻止写操作,只是限制了可能引起数据不一致的活动,更适合于高可用性和高性能要求的生产环境。

 2.4.生成加密密钥

openssl rand -base64 24

 2.5.配置加密密钥文件

echo -n "VCGgD7I04P/kBhwSzBUvK4fyT214H9XP" > /data/keyfile

3.加密备份 

xtrabackup --backup --target-dir=/data/backups --encrypt=AES256 \
--encrypt-key="VCGgD7I04P/kBhwSzBUvK4fyT214H9XP"

或者

xtrabackup --backup --target-dir=/data/backups/ --encrypt=AES256 \
--encrypt-key-file=/data/keyfile

 

4.优化加密过程

 加密备份中引入了两个选项,可用于 加快加密过程这些是 xtrabackup --encrypt-threads和 xtrabackup --encrypt-chunk-size.通过使用 xtrabackup --encrypt-threads选项 可以指定多个线程用于并行加密。选项xtrabackup --encrypt-chunk-size可用于指定大小(以 字节)(默认值为 64K)。

5.解密加密备份

xtrabackup --decrypt=AES256 --encrypt-key-file=/data/keyfile \
--target-dir=/data/backups/

 

 6.准备加密备份

xtrabackup --prepare --target-dir=/data/backups/

 7.恢复加密备份

7.1.使用rsync进行恢复

停止MySQL服务进行恢复数据  

systemctl stop mysqld
rsync -avrP /data/backups/ /var/lib/mysql/

 恢复数据时,一定要记得更改数据目录下的文件拥有者以及所属组权限,否则mysql无法启动  

 chown -R mysql.mysql /var/lib/mysql

重启MySQL服务

systemctl start mysqld

 7.2.使用xtrabackup命令恢复

使用xtrabackup命令恢复之前需要删除MySQL数据目录

rm -rf /var/lib/mysql/*

停止MySQL服务

systemctl stop mysqld

xtrabackup有一个xtrabackup --copy-back选项,它执行 将备份恢复到服务器的datadir

xtrabackup --copy-back --target-dir=/data/backups/

 恢复数据时,一定要记得更改数据目录下的文件拥有者以及所属组权限,否则mysql无法启动

 chown -R mysql.mysql /var/lib/mysql

 重启MySQL服务

systemctl start mysqld

8.总结

本篇文章和前面的文章其实没有什么区别,都是利用不同的参数实现不同的需求。本篇文章还介绍到了使用xtrabackup命令恢复备份,这里有个缺点就是要清除MySQL的数据目录下面的数据,而之前使用的rsync则不需要这个过程。

相关文章:

  • 粤港联动,北斗高质量国际化发展的重要机遇
  • 中间包烘烤器控制
  • 力扣1124.表现良好的最长时间段
  • 边缘混合计算智慧矿山视频智能综合管理方案:矿山安全生产智能转型升级之路
  • 基于RK3588的GMSL、FPDLink 、VByone及MIPI等多种摄像模组,适用于车载、机器人工业图像识别领域
  • OK527N-C开发板-简单的性能测试
  • Python容器 之 字典--字典的常用操作方法
  • 昇思MindSpore学习笔记2--快速入门
  • 中小企业如何防止被查盗
  • 秋招Java后端开发冲刺——并发篇1(线程与进程、多线程)
  • 半年支出8700万美元,财库预算只够再撑2年,波卡之后想咋过?
  • Linux kernel 与 设备树
  • Kubernetes (K8s) 底层原理
  • 一个强大的分布式锁框架——Lock4j
  • 定位线上同步锁仍然重复扣费的Bug定位及Redis分布式锁解决方案
  • Google 是如何开发 Web 框架的
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Android Volley源码解析
  • ComponentOne 2017 V2版本正式发布
  • CSS相对定位
  • javascript 总结(常用工具类的封装)
  • js递归,无限分级树形折叠菜单
  • k个最大的数及变种小结
  • laravel5.5 视图共享数据
  • STAR法则
  • Vue 重置组件到初始状态
  • 创建一种深思熟虑的文化
  • 工作中总结前端开发流程--vue项目
  • 技术:超级实用的电脑小技巧
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 浅谈sql中的in与not in,exists与not exists的区别
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #LLM入门|Prompt#3.3_存储_Memory
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (四)模仿学习-完成后台管理页面查询
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)EXC_BREAKPOINT僵尸错误
  • ****三次握手和四次挥手
  • **python多态
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理出现中文乱码的情况
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .gitignore
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core控制台应用程序初识
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET Standard 的管理策略
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 流——流的类型体系简单介绍
  • .net打印*三角形