迄今最安全的MySQL?细数5.7那些惊艳与鸡肋的新特性(上)【转载】
转自:
http://www.toutiao.com/m5762164771/
迄今最安全的MySQL?细数5.7那些惊艳与鸡肋的新特性(上) - 今日头条(TouTiao.com)
http://toutiao.com/a6300616158581604609/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=4592472790&utm_medium=toutiao_ios
写在前面
MySQL 5.7版本于2015年10月份左右GA,至今已经大半年了,但作为MySQL DBA的我却一直没时间follow它的特性,实在惭愧,以后会花时间来研究5.7版本的特性并针对部分优化功能做出压力测试。
本系列基于5.7.12版本来讲述MySQL的新特性,同时也建议大家跟踪官方blog和文档(http://dev.mysql.com/doc/refman/5.7/en/),以尽快知悉其新的变化。
MySQL 5.7的目标是成为发布以来最安全的MySQL服务器,其在SSL/TLS和全面安全开发方面有一些重要的改变。
1、5.7版本的用户表mysql.user要求plugin字段非空,且默认值是mysql_native_password,并且不再支持mysql_old_password。
2、增加密码过期功能
DBA可以设置任何用户的密码过期时间,具体详见官方文档《密码过期策略》(http://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html)。
可能大家都有如果业务系统的账号某一天突然过期了,业务受到影响怎么办? 别担心,可以设置密码永不过期。
default_password_lifetime=0
3、DBA可以通过对用户加锁/解锁进一步控制其访问db
例子:
4、SSL特性
MySQL 5.7版本提供了更为简单的SSL安全访问配置,并且默认连接就采用SSL的加密方式。细心的朋友在看官方文档的时候,会注意到安装步骤中多了一安装SSL的步骤,具体关于SSL是什么,请参考《图解SSL和加密》(http://www.linuxidc.com/Linux/2016-04/130034.htm)。
以下推荐两篇延伸阅读,关于SSL特性我相信绝大多数数据库都没有开启,姜承尧文章中的测试案例显示弱开启SSL性能开销在25%左右。大家在尝试新的特性的时候,根据自己的业务做评估。
《MySQL的SSL加密连接与性能开销》
《SSL/TLS in MySQL 5.7》
5、使用更安全的初始化方式
逐步废弃mysql_install_db的安装方式使用initialize代替(mysql_install_db <5.7.6<= mysqld —initialize) ,使用initialize参数初始化数据库有如下特性:
只创建一个 root账号,并且生成一个临时的标记为过期密码
不创建其他账号
不创建test 数据库
特别强调与—initialize不同,初始化的时候使用参数。
则会生成一个无密码的root账号。更详细的请移步官方文档(http://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html)。
6、SQL_MODE的变化
官方文档上表述,5.7 版本默认的SQL_MODE="ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION" 。而实际上我自己的测试环境中默认添加了STRICT_TRANS_TABLES 属性。
STRICT_TRANS_TABLES 意思是说要存储的字段的长度大于字段定义的大小,直接报错而非像5.6版本以及之前,截断数据进行存储,同时抛出一个warning。注意同一个会话调整 sql_mode必须退出之后在进入sql_mode才会生效。详细了解SQL_MODE请移步《sql_mode官方文档》(http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html)。注意5.7对于,'00000000 00:00:00' 这类default值的影响。
7、online ddl支持rename index name
个人感觉这个功能比较鸡肋,通常改变索引名称的时候,本身索引的结构需要增删字段,新建的索引名称也要修改合适的名称。
8、新增内置的full text 插件,支持中文、韩文、日文全文索引
之前的版本,只能依赖单词之间空格进行分词,对于依赖于语义分词而非空格分词的其他语言种类,5.7版本的引入支持解析中文、韩文、日文的全文索引--ngram full-text parser解决了该问题。具体请移步《ngram Full-Text Parser》(http://dev.mysql.com/doc/refman/5.7/en/fulltext-search-ngram.html)。
9、动态修改varchar长度大小
可以通过ALTER TABLE语句以in place方式修改varchar的大小且无需table-copy。但存在限制:表示varchar长度的字节数不能变化(如果变更前使用1个字节表示长度,变更后也必须使用1个字节表示),即只支持0~255内的或者255以上的范围变更(增大),如果字段的长度从254增到256时就不能使用in-place算法,必须使用copy算法,否则报错。需要注意的是,减小varchar(N)长度的大小必须使用copy类型,如:
10、临时表性能优化
MySQL 5.7对临时表做了极大的改动,提升性能。
通过优化CREATE TABLE, DROP TABLE, TRUNCATE TABLE,和ALTER TABLE语句的执行逻辑,提升临时表的性能(这个是从官网翻译的,还没找到除了alter之外的其他资料说明详细的优化过程)。
InnoDB临时表元数据不再存储于InnoDB系统表而是存储在INNODB_TEMP_TABLE_INFO,包含所有用户和系统创建的临时表信息。该表在第一次在其上运行select时被创建。
11、新增临时表空间
为所有非压缩的innodb临时表提供一个独立的表空间,默认的临时表空间文件为ibtmp1,位于数据目录。我们可通过innodb_temp_data_file_path参数指定临时表空间的路径和大小。
MySQL每次重新启动时,会重新创建临时表空间。
注意:从5.7.5开始,新增一个系统选项internal_tmp_disk_storage_engine可定义磁盘临时表的引擎类型为InnoDB,而在这以前,只能使用MyISAM。而在5.6.3以后新增的参数default_tmp_storage_engine是控制create temporary table创建的临时表的存储引擎,在以前默认是MEMORY,不要把这二者混淆了。
12、优化临时表
从MySQL 5.7.2针对正常和压缩的临时及相关对象引入新的"non-redo" undo log,因为临时表在数据库崩溃后不需要恢复,也就无需redo logs,避免了写relog相关的io,从而提高了性能。必须指出操作临时表需要undo log用于MySQL运行时的回滚、MVCC等。详见《innodb-temporary-table-undo-logs》(https://dev.mysql.com/doc/refman/5.7/en/innodb-temporary-table-undo-logs.html)。
13、支持新的DATA_GEOMETRY空间类型的数据
InnoDB现在支持MySQL-supported空间数据类型。之前的空间数据是以binary BLOB数据存储的,现在空间数据类型被映射到了一个InnoDB内部数据类型DATA_GEOMETRY。
14、升级innochecksum
innochecksum--离线的InnoDB文件校验工具,新增选择项或扩展的功能,如:
支持使用指定校验算法;
支持只重写校验值而不进行验证;
可指定允许的校验和不匹配量;
显示各类页的个数、导出页类型信息、输出至日志、从标准输入读取数据等;
从5.7.2起可支持校验超过2G的文件。
详细的用法参考《innochecksum 官方文档》(http://dev.mysql.com/doc/refman/5.7/en/innochecksum.html)。
15、online DDL语句重建普通表和分区表
OPTIMIZE TABLE、ALTER TABLE … FORCE、ALTER TABLE … ENGINE=INNODB等DDL操作使用inplace算法,减少了重建时间和对应用的影响。
16、针对Fusion-io NVM文件系统的优化
Linux系统中Fusion-io Non-Volatile Memory (NVM)文件系统提供了原子写能力,使InnoDB的doublewrite变得冗余。因此,MySQL5.7.4以后,如果Fusion-io设备支持原子写, MySQL系统会自动关闭doublewrite,减少IO,提升性能。
更多新特性解析未完待续……敬请期待~
迄今最安全的MySQL?细数5.7那些惊艳与鸡肋的新特性(上)【转载】的更多相关文章
- Mysql 5.6 新特性(转载)
本文转载自 http://blog.csdn.net/wulantian/article/details/29593803 感谢主人的辛苦整理 一,安全提高 1.提供保存加密认证信息的方法,使用.my ...
- 细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一
细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一(转) ADO.NET Entity Framework ADO.NET Entity Framework 是微软以 ADO.N ...
- 细数Python Flask微信公众号开发中遇到的那些坑
最近两三个月的时间,断断续续边学边做完成了一个微信公众号页面的开发工作.这是一个快递系统,主要功能有用户管理.寄收件地址管理.用户下单,订单管理,订单查询及一些宣传页面等.本文主要细数下开发过程中遇到 ...
- 细数iOS上的那些安全防护
细数iOS上的那些安全防护 龙磊,黑雪,蒸米 @阿里巴巴移动安全 0x00 序 随着苹果对iOS系统多年的研发,iOS上的安全防护机制也是越来越多,越来越复杂.这对于刚接触iOS安全的研究人员来说非 ...
- 细数Qt开发的各种坑(欢迎围观)
1:Qt的版本多到你数都数不清,多到你开始怀疑人生.从4.6开始到5.8,从MSVC编译器到MINGW编译器,从32位到64位,从Windows到Linux到MAC.MSVC版本还必须安装对应的VS2 ...
- Delphi能通过SSH登录Linux,连接MYSQL取数么?像Navicat一样
百度随时就能搜,你就懒得搜下.http://tieba.baidu.com/p/671327617 Ssh tunnel通常能实现3种功能1) 加密网络传输2) 绕过防火墙3) 让位于广域网的机器连接 ...
- 由于没有发现潜在的递归导致MySQL链接数溢出:MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connec
DAOProxy的代码:下面代码中红色高亮的就是出问题的地方,DAOFactory中会构造一个PersonDAOProxy,调用listPersons或者addPerson显然会导致递归,从而导致My ...
- 细数AutoLayout以来UIView和UIViewController新增的相关API
本文转载至 http://www.itjhwd.com/autolayout-uiview-uiviewcontroller-api/ 细数AutoLayout以来UIView和UIViewContr ...
- 细数MQ那些不得不说的8大好处
消息队列(MQ)是目前系统架构中主流方式,在大型系统及大数据中广泛采用.对任何架构或应用来说, MQ都是一个至关重要的组件.今天我们就来细数MQ那些不得不说的好处. 好处一:解耦 在项目启动之初来预测 ...
随机推荐
- apache与php安装
安装库文件 yum install -y pcre pcre-devel apr apr-deve 安装apache cd /usr/local/src/httpd-2.4.23 Bundled AP ...
- Shell脚本常用判断
-e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L fi ...
- Python基础篇-day2
主要内容: for循环 while循环 格式化输出(2) 数据统计及记录 ############################################################# 1 ...
- 项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】
在上一篇项目管理实践教程二.源代码控制[Source Control Using VisualSVN Server and TortoiseSVN]中我们已经讲解了如何使用TortoiseSVN和Vi ...
- 不安装oracle客户端,如何运行sqlplus
1.软件下载 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html 下载如下三个包: oracle-instantc ...
- 关于LCD的分屏与切屏 Tearing effect
详细文档(带图片):http://download.csdn.net/detail/xuehui869/5268852 1.LCM之Fmark功能 http://blog.csdn.net/zhand ...
- Chapter 2 Open Book——5
I was relieved that I had the desk to myself, that Edward was absent. 我能一个人一张桌子很开心,就因为Edward 没来. I t ...
- form表单中的带有name的标签直接转JSON
1. 将如下内容引入页面:比如说新建一个 a.js,然后在页面中引入a.js//将form表单序列化成json格式 $.fn.serializeObject = function () { var o ...
- VMWare桥接、NAT和only-host三种模式
如果你想利用VMWare安装虚拟机,或想创建一个与网内其他机器相隔离的虚拟系统,进行特殊的调试工作.此时,对虚拟系统网络连接模式的选择就非常重要了.如果你选择的工作模式不正确,就无法实现上述目的,也就 ...
- 在 Visual Studio 2010 中创建 SharePoint 2010 事件接收器
Microsoft Visual Studio 2010 提供了一个可用于生成事件接收器的项目类型,事件接收器会在 Microsoft SharePoint 2010 网站上选择事件之前或之后执行操作 ...