mysql5.7的新特性

安全特性

除了“默认安全”的安装之外。我们也增加了许多个性安全来帮助用户保持他们的数据库实例远离意外使用。这包括了较好的数据加密,较好的密码处理,较安全的传输层等等。

目前,我们也支持了多 AES 加密模式 (WL#6781)。我们也增强了我们的高级加密标准(AES)加密/解密函数AES_ENCRYPT() 和 AES_DECRYPT() 的安全强度——通过增加对较大密匙长度和不同的块模式的支持。参见 Georgi Kodinov 的文章“在 MySQL5.6.17 里理解和满足你的 ASES 加密需要“。

我们在 mysql.user 表里增加了一个时间戳字段用于保存密码最后一次改变的时间(WL#7131)。这为密码轮换政策的实行提供了基础。参见 Todd Farmer 的文章 “MySQL 实施密码策略“。


我们通过扩展 CREATE USER 和 ALTER USER 命令实现了对用户账户(登陆权限)的可用(解锁)或不可用(加锁)的设置(WL#6054)。参见 Todd Farmer 的文章“构建一个好的 CREATE USER 命令“.

我们扩展了内置身份认证插件用以支持代理用户(WL#7724)。MySQL 已经有一个可以支持主要用户功能的代理用户的概念。比如 SQL 角色:从权限分配里抽象出用户标识/身份的功能。这允许多个用户——在不同的方式中的定义,日志,和审核——分享一个单独的管理权限的设置。在部署很多个已经定义了权限的用户时,这提供了操作上的便利,但是直到现在,通过扩展身份认证插件,代理用户促使了这种改变。这清除了以前的限制。参见 Todd Farmer 的文章 “在 5.7.7 中使用扩展的代理用户模仿角色“。

我们还增加了用户名的最大长度,从 16 个字符倒 32 个字符(WL#2284)。

我们已经在 CREATE USER 和 DROP USER 命令里实现了 IF [NOT] EXISTS 条件判断。这可以让分布式账户在复制组内使用非同步账户事件时(故意地),复制而不会触发复制失败。这也简化了账户管理操作的脚本。见在 Bug#15287里的特性请求。

InnoDB 的本地分区

我们已经增加了对 InnoDB 本地分区的支持(WL#6035)。到目前为止,对 InnoDB 分区的支持依赖于 ha_partition 处理器,这个处理器可以为每一个分区创建一个新的处理器,当使用很多分区时,这个处理器也相应的浪费了很多资源。通过在 InnoDB 内对本地分区的支持,你可以使用更少的整体资源(见: bug#62536bug#37252, 和 bug#70641)。InnoDB 的本地分区也为较好的整体分区铺平了道路。这包含诸如并行查询进程,改进分区裁剪(由于较精确的计数统计),外键支持,全局二级索引,和在分区表上的全文本搜索之类的功能。作为这项工作的一部分也已经从分区处理器类中的特性部分分离出了它自己的分区接口(WL#4807)。这是为了重构成模块化,并且从其他的服务器基础代码中解耦分区引擎。

另外,我们为分区表增加了对索引条件下推(ICP) 的支持 (WL#7231, 来自于 Bug#70001)。我们也增加了EXCHANGE PARTITION 命令的 对[{WITH| WITHOUT} VALIDATION]条件的支持 (WL#5630, 来自于Bug#57708)。我们还为已分区的InnoDB 表增加了可移动表空间 的支持。见 Mattias Jonsson的文章“MySQL 5.7.4 目前对InnoDB分区支持可移动的表空间“。

InnoDB 的通用表空间

我们新增了CREATE TABLESPACE 语句来创建一个通用表空间(WL#6205WL#8109)。这个功能可以让用户自由的选择表和表空间之间的映射,例如,表空间的创建和这个表空间应该含有什么样的表。这也让在同一个表空间的用户或客户对所有的表分组,因此在文件系统的一个单独的文件内持有他们所有的数据。我们也为通用表空间实现了元数据锁 (MDL)(WL#7957)。这主要是为了满足 InnoDB 中新的普通表空间,也为了已有的 NDB 集群通用表空间。


InnoDB 临时表性能

优化普通 SQL 临时表性能是 5.7 的目标之一。首先,我们通过避免持久化临时表到磁盘时的不必要的步骤,使得临时表的创建和移除成为一个轻量级的操作。我们将临时表移动到一个单独的表空间(WL#6560) ,因此对于临时表的恢复过程就变成了一个在启动时仅仅简单的重新创建临时表的单一的无状态步骤。我们去掉了临时表中不必要的持久化(WL#6469)。临时表仅仅在连接/会话内可见,创建它们,通过服务的生命周期绑定它们。我们通过移除不必要的 UNDO 和 REDO 日志,改变缓冲和锁,从而为临时表优化了 DML(WL#6470) 。我们增加了 UNDO 日志的一个额外的类型 (WL#6915),这个类型是不可 REDO 日志和保留在一个新的单独的临时表空间。这些 non-redo-logged UNDO 日志在恢复期间不需要,仅在回滚操作是需要。

第二,我们也为临时表设定了一个特别类型,我们称之为“内在临时表”(WL#7682WL#6711)。内在临时表和普通临时表很像,只是内在临时表使用宽松的 ACID 和 MVCC 语义。目的是为了支持内部模块的内部用例, 例如,优化器为了中间操作而要求轻型和超快速的表。那么我们就让优化器使用 InnoDB 的“内在临时表”作为内部储存(WL#6711)。最终,我们让 InnoDB 的默认引擎使用 内部临时表 。见 Krunal Bauskar 的文章“MySQL 5.7: InnoDB 内在表“。

缓冲池 —— 卸载和加载

我们改进了缓冲池卸载和加载场景(WL#6504)。目前可以卸载每个缓冲池中仅最热的 N% 页。加载操作减少了对用户活动的破坏性,因为现在的加载是在后台为客户提供服务的;也不会尝试着太据有侵略性和从服务新的客户请求中占据太多的 IO 资源。见 Tony Darnell 的文章 “MySQL 卸载和加载InnoDB 缓冲池“。

我们也通过默认和改变默认百分比到 25% 的方式改变服务器使用缓冲池加载和卸载 (WL#8317)。这也使得在 1. 支持“热”工作数据设置和 2. 关闭和启动次数之间形成好的默认平衡。

工具

服务器附带一个实用程序或脚本(工具)的设置。这是为了提供和增加更多的工具。我们也想去除“脚本”而使用 C/C++ 从而改进可移植性,覆盖更多的使用场景(一个可以运行在所有环境下的脚本)。

我们实现了一个新的 MySQL 服务器工具叫做 mysqlpump,通过 mysqldump (WL#7755)调用——但不是 100% 的兼容。这个新工具的主要特点是可以执行并行的备份和存储操作(已有的 mysqldump 将继续被支持)。

我们也扩展了 innochecksum 工具的功能(WL#6045)。目前可以指定校验值算法(innodb/crc32/none),使用指定的算法重写当前的校验值,即使当前的校验值不可用也可以重写,允许在终止程序之前指定最大不匹配校验值。innochecksum 目前也可以在多个表空间文件和相同表空间的多个文件上操作。见 Anil Toshniwal 的文章“Improving Innochecksum“。

我们重写了mysql_upgrade 工具 (WL#7308),这个工具解决许多已报告的 bug,也使得mysql_upgrade 更加的稳健和易于维护。例如,它解决了 Nicholas Bamber 报告的 Bug#65288 和Florian Weimer 报告的 Bug#71579 。


我们增加了 SSL 选项和支持 mysqlbinlog 客户端程序(WL#7198),这允许系统管理员通过安全连接执行远程 binlog 查询 (--read-from-remote-server) 。这是上一版没有 SSL 支持的 MySQL 客户端程序遗留下来的。

我们已经转化 mysql_secure_installation 脚本为 C/C++(WL#6441)。这个程序现在可以使用 C API(libmysql) 执行指定的命令直接连接到服务器。这取消了对于在文件系统中一个临时选择文件来存储用户提供的密码的需要。

为了让程序可以在所有平台上使用——特别是 Windows,也为了提供更好的用户体验,覆盖更多功能,提高安全性而重新设计程序,我们开始了转 换mysql_install_db 脚本为 C/C++ (WL#7688)。在 5.7 之后的版本里,我们决定将这个功能回归到服务器本身(见 WL#7307)。在 5.7 里 mysql_install_db 程序,可以被使用,但是不再被需要,我们计划在以后的版本里删除这个功能。

社区贡献

服务器端语句执行超时(WL#6936) :这是基于 Davi Arnaut 提交的贡献(Bug#68252)。这个功能是为顶层 SELECT 语句的执行实现了一个服务器端的时间限制。一定的时间之后,语句就会被中止而不会影响到会话(连接)或者事务上下文。见 Praveen Hulakund 的文章“服务端 SELECT 语句超时“。

多用户级锁:允许通过 GET_LOCK() 获得多个锁(WL#1159)。用户级锁经常用在访问一些资源时而表或者行级锁不适用的情况下实现互斥 。这个功能允许每个连接都拥有多用户级锁。而这个功能就源于Konstantin Osipov 的贡献(Bug#67806)。见 Dmitry Lenev 的文章“一个贡献者的故事“。


触发器

BEFORE 触发器没有为非空列执行 (WL#6030) :这个功能确保了在 SQL 语句结束后对列约束的检查。这符合 SQL 标准。在 5.6 和早期版本中,MySQL 对列约束的检查太早。见由 Peter Gulutzan 报告的Bug#6295,和 Dmitry Shulga 的文章“MySQL 的 BEFORE 触发器和非空列“.

表的多触发器(WL#3253) :这个功能为每个动作(INSERT, UPDATE, DELETE) 和时机(BEFORE or AFTER)都拥有多个触发器成为可能。这也符合 SQL 标准。见 Dmitry Shulga 的文章“为动作/时机的相同值支持表的多触发器“。


材料源自开源中国的Robbie_Zhu翻译而来,如有侵权请联系我删除,本人只作为参考资料自用。


http://www.oschina.net/translate/whats-new-in-mysql-5-7-generally-available?cmp&p=4   这是原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值