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
重启数据库
service mysqld restart
3.安装插件
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为例进行说明。
查看所加插件是否生效:
4.创建加密表空间
CREATE TABLE t1 (c1 INT) ENCRYPTION='Y';
ALTER TABLE t1 ENCRYPTION='Y';
另外如果取消加密表空间:
ALTER TABLE t1 ENCRYPTION='N';
插入数据:
把加密文件删除:
在去数据库查看表:
遇到这种表空间加密文件被误删的情况只能利用备份恢复数据了。
补充:
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;)