讲师中心 微信公众号
AI工具推荐 视频效率加速

如何实现在MySQL 8.0中对加密表空间进行物理备份与还原?

星萱君_3047

星萱君_3047

发布时间:2026-06-03 12:47:10

|

583人浏览过

|

来源于php中文网

原创

MySQL 8.0 加密表空间物理备份必须使用 MySQL Enterprise Backup(MEB),mysqldump 不行;因其仅导出逻辑 SQL,无法备份加密页、密钥环及元数据,而 MEB 可原子性备份 ibd 文件、密钥环文件和元数据描述文件,并要求 server_uuid、插件版本与密钥环路径严格一致。

如何实现在mysql 8.0中对加密表空间进行物理备份与还原?

MySQL 8.0 的加密表空间物理备份必须用 mysqlbackup(MEB),mysqldump 不行

MySQL 原生的 mysqldump 只能导出逻辑 SQL,对启用 ENCRYPTION = 'Y' 的 InnoDB 表空间(如加密的通用表空间或系统表空间)完全无感知——它不读取 ibd 文件,自然无法备份加密密钥上下文和加密页结构。物理备份必须绕过 SQL 层,直接复制加密后的文件块,并同步备份密钥环状态。

关键前提是:你必须使用 MySQL Enterprise Backup(MEB)8.0.x 版本,且与 MySQL Server 8.0 主版本严格匹配(例如 MySQL 8.0.33 必须配 MEB 8.0.33)。社区版用户没有替代方案——rsync 或 cp 直接拷贝会失败,因为密钥环(keyring_file 或 keyring_encrypted_file)未被一致捕获,还原后会报 Operating system error number 13 in a file operation 或更具体的 Cannot decrypt tablespace。

  • 确认已启用密钥环插件:SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
  • 确保 keyring_file_data(或 keyring_encrypted_file_data)指向的文件路径在备份前后可访问且权限正确(MySQL 进程需有读写权)
  • MEB 备份命令中必须显式加 --use-tts(Tablespace Transport)参数,否则可能跳过加密表空间元数据

执行物理备份时必须同时备份密钥环文件和 ibd 文件

加密表空间的物理备份不是“只拷 ibd”,而是“ibd + 密钥环文件 + 元数据描述文件”三者原子一致。MEB 会自动识别并打包密钥环文件(只要配置正确),但你需要手动验证:

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 检查 my.cnf 中密钥环配置,例如:early-plugin-load=keyring_file.so 和 keyring_file_data=/var/lib/mysql-keyring/keyring
  • 备份完成后,在备份目录里找 keyring/ 子目录(MEB 默认创建),里面应包含与源实例完全相同的密钥环文件内容
  • 如果用的是 keyring_encrypted_file,还要确认其主密钥(master_key_path)所指文件也被 MEB 捕获(它通常不在 keyring/ 下,需额外归档)
  • 不要依赖 innodb_encrypt_tables=ON 全局设置来推断哪些表空间被加密——逐个查:SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE ENCRYPTION = 'Y';

还原加密表空间前,必须先恢复密钥环,再启动 mysqld

还原顺序错一步就彻底失败:不能先启 mysqld 再放密钥环,也不能用新生成的密钥环覆盖旧的。MEB 还原命令(mysqlbackup --copy-back)默认会把备份里的 keyring/ 目录还原到目标实例的密钥环路径,但你要人工确认:

  • 目标实例的 my.cnf 中 keyring_file_data 路径必须与备份时完全一致,否则 MEB 还原的密钥环文件会被忽略
  • 还原后、启动前,手动校验密钥环文件 md5 是否与源一致:md5sum /var/lib/mysql-keyring/keyring(对比备份包内 keyring/keyring)
  • 启动 mysqld 后立刻检查错误日志,重点搜 keyring 和 decrypt;若出现 Failed to load keyring,说明路径或权限不对,不是加密本身的问题
  • 还原后首次打开加密表时会触发密钥解密验证,耗时略长(尤其大表),别误判为卡死

跨主机还原加密表空间时,server_uuid 和密钥环主密钥必须匹配

如果你把备份还原到另一台机器(比如灾备机),除了密钥环文件,还需注意两个隐性依赖:

  • server_uuid 必须与原实例相同(修改 auto.cnf 中的 server-uuid 值),否则部分密钥环实现(尤其是 keyring_encrypted_file)会拒绝加载密钥,报 Keyring failed to decrypt master key
  • 如果用了 keyring_encrypted_file,它的主密钥(由 master_key_path 指定)是绑定 server_uuid 加密的,换机器不换 uuid 就行;但若连 uuid 都不同,就得提前用 keyring_encrypted_file 提供的工具重新封装密钥环
  • 不要试图在目标机上重新安装 keyring 插件——插件版本必须与备份时完全一致,否则 ABI 不兼容,加载失败

最易被忽略的是 server_uuid 这个软依赖:它不出现在任何备份命令参数里,也不报明确错误,但会导致还原后所有加密表无法访问,且错误日志里只有模糊的密钥加载失败提示。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4263

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

891

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1109

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6161

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3023

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6140

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

8281

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1130

2024.04.29

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

0

2026.10.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 187人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn