0

0

mysql如何迁移加密的表空间文件_mysql keyring文件同步

P粉602998670

P粉602998670

发布时间:2026-03-17 14:39:51

|

262人浏览过

|

来源于php中文网

原创

mysql如何迁移加密的表空间文件_mysql keyring文件同步

加密表空间迁移时 keyring 文件不一致会直接报错

MySQL 加密表空间(如 innodb_encrypt_tables=ON)依赖 keyring 插件管理主密钥,而密钥本身不存于数据库内,而是落在文件系统中(比如 keyring_file_data 指向的 JSON 文件)。迁移表空间文件(.ibd)时,如果目标实例没加载相同的 keyring 文件、或文件内容被修改/覆盖,启动时就会卡在 Tablespace is encrypted but no keyring is available 或类似错误,甚至直接拒绝挂载该表。

必须同步 keyring_file_data 文件且确保权限和路径一致

keyring 文件不是“备份后拷过去就行”,它对路径、属主、权限极其敏感。MySQL 启动时会校验文件是否可读、是否被篡改(内部有 checksum)、是否与当前 keyring 插件版本兼容。

  • keyring_file_data 路径需完全一致:比如源库是 /var/lib/mysql-keyring/keyring,目标库配置里也得是这个绝对路径,不能只复制文件到别的位置然后改配置——MySQL 会拒绝加载非预期路径下的 keyring
  • 文件权限必须是 600,属主必须是运行 mysqld 的用户(通常是 mysql:mysql),否则插件初始化失败,日志里出现 Failed to load keyring file: Permission denied
  • 不要用文本编辑器手动修改 keyring 文件:JSON 结构易出错,且 MySQL 内部会对 keyring 文件做哈希校验;哪怕只多一个空格,重启后也会提示 Keyring file is corrupted
  • 若源库用了 keyring_encrypted_file(AES 加密的 keyring),你还得一并迁移它的密码(通过 keyring_encrypted_file_password 配置项传入),且该密码不能丢失

迁移前必须停写并显式刷新加密表空间

表空间加密状态是动态的,某些页可能缓存在 buffer pool 中未落盘。直接拷贝 .ibd 文件可能导致页加密状态不一致,恢复后查询时报 Encrypted tablespace page decryption failed

Picsart AI Image Generator
Picsart AI Image Generator

Picsart推出的AI图片生成器

下载
  • 执行 FLUSH TABLES tbl_name FOR EXPORT(适用于单表迁移),或全局停写后 FLUSH TABLES WITH READ LOCK + FLUSH ENGINE LOGS
  • 确认 INFORMATION_SCHEMA.INNODB_TABLESPACES 中对应表的 ENCRYPTION 字段为 Y,且 STATEactive,避免误迁未加密副本
  • 拷贝前检查 .ibd 文件大小是否稳定(无写入时大小应不再增长),防止截断

目标实例启动前要验证 keyring 插件加载顺序和参数

MySQL 加载 keyring 插件有严格顺序:必须在 InnoDB 初始化之前完成。配置错位会导致插件加载成功但不生效,表空间解密失败却无明显报错。

  • my.cnf 中,early-plugin-load=keyring_file.so 必须出现在 [mysqld] 段最开头,不能放在其他插件之后
  • keyring_file_data 必须是绝对路径,且不能和 datadir 在同一磁盘分区(官方建议,避免崩溃时 keyring 和数据同时损坏)
  • 启动后立刻查 SELECT * FROM performance_schema.keyring_keys;,确认密钥数量、名称、type 和源库一致;如果为空,说明 keyring 没真正加载成功
  • 别跳过 ALTER TABLE tbl_name IMPORT TABLESPACE 步骤——即使表结构已存在,也必须走这个流程触发 InnoDB 对加密元数据的校验

最常被忽略的是 keyring 文件的属主和 SELinux 上下文(如果开了 SELinux)。哪怕所有配置都对,ls -Z 一看发现 keyring 文件上下文是 unconfined_u:object_r:user_home_t:s0,而 mysqld 只能读 system_u:object_r:mysqld_db_t:s0,照样静默失败。这事没法靠日志一眼看出,得盯住 audit.log 或临时关 SELinux 排查。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

689

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

554

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

287

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

520

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

267

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

392

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

543

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

668

2023.08.14

c++ 字符处理
c++ 字符处理

本专题整合了c++字符处理教程、字符串处理函数相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.17

热门下载

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

精品课程

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

共48课时 | 2.6万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 858人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号