mysql表空间加密

ERROR 3185 (HY000): Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully.

看到这个报错,感觉很陌生,查了下资料是表空间加密文件被删除了,顺便了解下表空间加密。

MySQL5.7开始支持表空间加密了,这个特性默认是没有启用的,要使用这个功能要安装插件keyring_file。

 

1.创建**文件目录

mkdir -p /opt/mysql/3306/mysql-keyring/

chown -R mysql.mysql /opt/mysql/3306/mysql-keyring/

chmod 750  /opt/mysql/3306/mysql-keyring/

2.修改配置文件

early-plugin-load=keyring_file.so

keyring_file_data= /opt/mysql/3306/mysql-keyring/keyring

mysql表空间加密

重启数据库

service mysqld restart

3.安装插件

mysql表空间加密

mysql表空间加密

 

nnoDB表空间加密依赖于keyring插件。总共有四个插件

keyring插件 开始版本 类型
keyring_file  5.7.11 社区版
keyring_encrypted_file  5.7.21 企业版
keyring_okv  5.7.12 企业版
keyring_aws  5.7.19 企业版

由于上面四种类型的加密后三种都只有在企业版本有,所以这里安装社区版本的keyring_file为例进行说明。

查看所加插件是否生效:

mysql表空间加密

 

4.创建加密表空间
CREATE TABLE t1 (c1 INT) ENCRYPTION='Y';
ALTER TABLE t1 ENCRYPTION='Y';

另外如果取消加密表空间:
ALTER TABLE t1 ENCRYPTION='N';

插入数据:

mysql表空间加密

把加密文件删除:

mysql表空间加密

 

在去数据库查看表:

mysql表空间加密

遇到这种表空间加密文件被误删的情况只能利用备份恢复数据了。

 

补充:

mysql表空间加密,它使用两层加密架构。

包括:master key 和 tablespace key

master key用于加密tablespace key,加密后的结果存储在tablespace的header中。tablespace key用于加密数据

当用户想访问加密的表时,innoDB会先用master key对之前存储在header中的加密信息进行解密,得到tablespace key。再用tablespace key解密数据信息。tablespace key是不会被改变的(除非进行alter table t1 encrytion=NO, alter table t1 encrytion=YES)。而master key可以随时改变(ALTER INSTANCE ROTATE INNODB MASTER KEY;)