MySQL5.7开始支持表空间加密了,增强了MySQL的数据文件的安全性,这是一个很不错的一个功能,这个特性默认是没有启用的,要使用这个功能要安装插件keyring_file。

下面就来看看怎么安装,安装这个插件不用重启MySQL

1.安装插件

1.1 安装插件

(mysql5.7)root@localhost [(none)]> INSTALL PLUGIN keyring_file  soname 'keyring_file.so';
Query OK, 0 rows affected ( 0.01 sec)

2.创建密钥文件目录

mkdir -p /ssd01/3306/mysql-keyring/

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

chmod 750  /ssd01/3306/mysql-keyring/

3.设置KEY文件,这个是动态参数,可以直接设置

(mysql5.7)root@localhost [(none)]> set global keyring_file_data='/ssd01/3306/mysql-keyring/keyring';

Query OK, 0 rows affected (0.00 sec)

(mysql5.7)root@localhost [(none)]>

4.重要事情说三遍:更新配置文件,避免遗忘更新配置文件,避免下次重启出问题

在my.cnf的[mysqld]段,加这两行

early-plugin-load=keyring_file.so

keyring_file_data=/ssd01/3306/mysql-keyring/keyring

##演示一下没有把keyring_file_data写到配置文件的情况。

KEY文件默认在base目录

(mysql5.7)root@localhost [(none)]> show global variables like '%keyring_file_data%';

+-------------------+----------------------------------+

| Variable_name     | Value                            |

+-------------------+----------------------------------+

| keyring_file_data | /usr/local/mysql/keyring/keyring |

+-------------------+----------------------------------+

1 row in set (0.00 sec)

插件还是在的

(mysql5.7)root@localhost [(none)]> show plugins;

+----------------------------+----------+--------------------+-----------------+---------+

| Name                       | Status   | Type               | Library         | License |

+----------------------------+----------+--------------------+-----------------+---------+

| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL            | GPL     |

| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL            | GPL     |

| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_TEMP_TABLE_INFO     | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| INNODB_SYS_VIRTUAL         | ACTIVE   | INFORMATION SCHEMA | NULL            | GPL     |

| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| partition                  | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL            | GPL     |

| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |

| ngram                      | ACTIVE   | FTPARSER           | NULL            | GPL     |

| keyring_file               | ACTIVE   | KEYRING            | keyring_file.so | GPL     |

+----------------------------+----------+--------------------+-----------------+---------+

45 rows in set (0.00 sec)

访问加密的表会报错,找不到master_key

(mysql5.7)root@localhost [test]> show create table test_1;
ERROR 3185 (HY000): Can't find master key from keyring, please check keyring plugin is loaded.

2.测试加密表

(mysql5.7)root@localhost [(none)]> use test11;

Database changed

(mysql5.7)root@localhost [test11]> alter table test1 encryption='Y';

Query OK, 17 rows affected (0.04 sec) Records: 17  Duplicates: 0  Warnings: 0

查看一下information_schema.tables 看看是否加密成功

(mysql5.7)root@localhost [test11]> select * from information_schema.tables where CREATE_OPTIONS like '%ENCRYPTION="Y"%'\G;

*************************** 1. row ***************************

TABLE_CATALOG: def

TABLE_SCHEMA: test11

TABLE_NAME: test1

TABLE_TYPE: BASE TABLE

ENGINE: InnoDB

VERSION: 10

ROW_FORMAT: Dynamic

TABLE_ROWS: 17

AVG_ROW_LENGTH: 963

DATA_LENGTH: 16384

MAX_DATA_LENGTH: 0

INDEX_LENGTH: 16384

DATA_FREE: 0

AUTO_INCREMENT: 102

CREATE_TIME: 2016-06-21 15:17:33

UPDATE_TIME: 2016-06-21 15:17:33

CHECK_TIME: NULL

TABLE_COLLATION: utf8_general_ci

CHECKSUM: NULL

CREATE_OPTIONS: ENCRYPTION="Y"

TABLE_COMMENT:

1 row in set (0.03 sec)

(mysql5.7)root@localhost [test11]>

也许有人问,我这个支持在线DDL么,其实想一下,加密表空间应该是拷贝表方式。

(mysql5.7)root@localhost [test]> alter table test_1 encryption='Y',ALGORITHM=INPLACE,LOCK=none;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Invalid encryption option.. Try ALGORITHM=COPY.
(mysql5.7)root@localhost [test]>

解密表空间

(mysql5.7)root@localhost [test]> alter table test1 encryption='N';

Query OK, 17 rows affected (0.01 sec) Records: 17  Duplicates: 0  Warnings: 0

(mysql5.7)root@localhost [test]> select * from information_schema.tables where CREATE_OPTIONS like '%ENCRYPTION="Y"%'\G;

Empty set (0.05 sec)

3.小结

安装插件很简单,有必要测试一下加密表空间对性能的影响。测试也很简单,用sysbench,tpcc先创建表,再修改为加密表空间。还有key密钥不要误删除了,不然就呵呵哒。你数据只能用备份来恢复了

MySQL5.7表空间加密的更多相关文章

  1. MySQL InnoDB表空间加密

    从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 .此功能为物理表空间数据文件提供静态加密.该加密是在引擎内部数据页级别的加密手段,在数据页写入文件系统时加 ...

  2. mysql表空间加密 keyring encryption

    从5.7.11开始,mysql开始支持物理表空间的加密,它使用两层加密架构.包括:master key 和 tablespace key master key用于加密tablespace key,加密 ...

  3. 10. InnoDB表空间加密

    10. InnoDB表空间加密 InnoDB支持存储在单独表空间中的表的数据加密 .此功能为物理表空间数据文件提供静态加密. 详细信息见官方文档

  4. KingbaseES 表空间加密-透明加密

    透明存储加密是指数据在写到磁盘上时对其进行加密,当授权用户重新读取数据时再对其进行解密.加密解密过程对用户都是透明的,无需对应用程序进行修改,授权用户甚至不会注意到数据已经在存储介质上加密.当前的透明 ...

  5. OCM_第三天课程:Section1 —》表空间的操作和管理、服务配置

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  6. Oracle加密表空间进行数据加密的示例

    接上篇:http://www.cnblogs.com/myrunning/p/4292049.html 1查看数据库版本 2查看当前数据库表空间 从这里看到我们此时数据库里没有加密表空间. 3创建加密 ...

  7. mysql-5.7 收缩系统表空间详解

    innodb 系统表空间是一个逻辑上的概念,它的物理表现就是innodb系统表空间文件:在讲扩展系统表空间时我们说到 可以用增加文件,增加autoextend标记 这两种方式来解决:但是问题到了收缩表 ...

  8. MySQL5.7 import表结构报错超出表空间界限

    事后测试了一下,一下方法就是垃圾,看看可以,别跟着学!!! 数据库重启后,问题依然暴露出来了,参数什么的都是扯,擦 记录一个困扰我好几天的问题.先贴上报错: space name jxtms/Cost ...

  9. MySQL5.7开启独立表空间参数innodb_file_per_table【原创】

    今天在线上某个系统发现MySQL数据库使用的是共享表空间,想修改为独立表空间,操作如下: #因为是主从结构,在从库修改测试,先关闭binlog SET SQL_LOG_BIN=; show varia ...

随机推荐

  1. 【转载】MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法

    原文地址:MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法 作者:mchdba 某个初级dba误删index,mysql漫山遍野全是10S以上的慢sql,mysql ...

  2. SVN四部曲之SVN命令精通

    SVN 常用命令一览表 命令 功能 使用格式 checkout 检出 svn  co  URL up 更新到当前URL的末端 svn  up switch 更新到某一tag/branch svn  s ...

  3. 设计模式之单例模式(Singleton Pattern)

    单例模式 单例模式(Singleton Pattern)在java中算是最常用的设计模式之一,主要用于控制控制类实例的数量,防止外部实例化或者修改.单例模式在某些场景下可以提高系统运行效率.实现中的主 ...

  4. 从零开始学ios开发(十):Multiview Applications(多个xib之前的切换)

    这篇学习的主要内容是Multiview,在我们学习iphone旋转的时候,介绍过多个view的使用方法,不过这里的view和旋转屏幕中所指的多个view是不同的,旋转屏幕中涉及到的多个view是在一个 ...

  5. 模仿开发H5游戏,看你有多色

    开发记录 前言 之前跟着慕课网学习开发H5小游戏开心鱼,勾起我的兴趣. 在写代码的过程中,不怎么会遇到问题.虽然代码是亲手敲出来的,但是由于并没有对游戏的整体思路,所以并不知道开发与优化的过程. 为了 ...

  6. sqlserver 2008r2 表分区拆分问题

    问题描述: 对tab1表实行自动天分区,每天通过sqlserver代理-作业00:00点自动生成分区: 因有次停了数据库服务,sqlserver 代理服务忘记开启,导致当天00:00没有生成新分区: ...

  7. 1067: [SCOI2007]降雨量 - BZOJ

    Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2 ...

  8. PHP开发框架[流行度排名]

    在PHP开发中,选择合适的框架有助于加快软件开发,节约宝贵的项目时间,让开发者专注于功能的实现上.Sitepoint网站做了一个小的调查,结果显示最流行的PHP框架前三甲为:Laravel.Phalc ...

  9. EBP的妙用[无法使用ESP定律时]

    1.了解EBP寄存器 在寄存器里面有很多寄存器虽然他们的功能和使用没有任何的区别,但是在长期的编程和使用 中,在程序员习惯中已经默认的给每个寄存器赋上了特殊的含义,比如:EAX一般用来做返回值,ECX ...

  10. Public, Private and Protect

    public 意味着在其后声明的所有成员对所有的人都可以取. private 意味着除了该类型的创建者和类的内部成员函数之外,任何人都不能存取这些成员. protect 它与private基本相似,只 ...