mysql5.7新特性
1、innodb存储引擎的增强
A:Online alter table以及索引
alter table t rename index t_idx to t_newidx;
Varchar列的大小在线调整的方法:
Alter table t1 algorithm=inplace,change column c1 c1 varchar(255);
B:Innodb_buffer_pool online change
Mysql5.7.5之后在线调整innodb_buffer的大小,引入chunk的概念,每个chunk默认的大小为128M,innodb_buffer_pool_size以chunk为单位进行动态增大和缩小,innodb_buffer_pool_chunk_size。Innodb_buffer_pool_size 的大小是inndb_buffer_pool_chunk_size*innodb_buffer_pool_instances的倍数,如果不是,将适当调大innodb_buffer_pool_size,值从大改小的过程需要释放内存。
C:Innodb_buffer_pool_dump和load的增强
通过设置innodb_buffer_pool_dump_pct实现的即dump的百分比,只导出最热的那部分数据的page,当系统繁忙时,可以通过innodb_io_capacity的参数限制buffer pool_load 的过程。
D:Innodb 临时表优化
临时表不在记录redo log,mysql 5.7把临时表的数据从系统表空间中抽离出来,形成了自己的独立表空间,并且把临时表的相关索引信息保存在信息表information_schema库下 innodb_temp_table_info表中。
独立表空间文件名ibtmp1,默认12MB。
E:Page clean的效率提升
show global variables like '%innodb_page%';
Page cleaner线程不再是只有一个,可以通过新增的参数innodb_page_cleaners 来指定page cleaner线程的数量,提高脏页的刷新效率。
F:Undo log 自动清除
启动新增的innodb_undo_log_truncate 参数(默认是关闭状态),设置innodb_undo_log_truncate=1开启。
当undo log的大小超过innodb_max_undo_log_size参数指定的最大值,undo log 就会自动清除,以防止磁盘空间产生消耗。
2、其他方面的增强
A:安全性的增强
数据库安装初始化,废弃了mysql_install_db命令,改为使用mysqld命令配合--iniialize的方式。Root用户密码不在默认为空,而是随机尝试一个密码,保存在错日志里面。密码记录不再是password字段,而是authentication_string字段。
默认安装之后的test库没有了,新增super_read_only参数,来禁止超管的写操作权限。增加了账户密码有自动过期策略,密码过期之后需强制进行修改。
B:Sql_mode的变化
默认开启严格的sql mode(STRICT_TRANS_TABLES),5.7版本之前默认是no_engine_substitution,启用严格模式下,如果遇到sql书写有问题,就会直接抛出错误,不会出现超长内容自动被截断的现象,而且不能再grant命令中直接创建用户了,需要使用create user命令;
C:Sys schema功能的增强
Sys schema是mysql 5.7.7引入的一个系统库,包含了一系列的试图,函数,存储过程。Sys schema的数据来源主要是performance_shcema。其目的就是为了降低查询performance_schema的复杂度。
D:复制功能的增强
在复制章节中,我们已经介绍了5.7版本中复制功能的提升,主要分为以下几点:
并行复制:基于logical-clock(5.7版本引入),一个组内提交的内事物都可以并行,可以达到接近主库并发效果。
多源复制:
支持又多个master向一个slave复制。多用于多个服务器备份到单个服务器上。可用于异地灾备,集中备份。
增强半同步:在mysql5.5半同步复制基础上的增强,在集群架构切换时可以保证数据的一致性。由after_commit模式变成了after_sysnc,提高了复制的效率和数据的可靠性。
组复制(mgr):有点像Oracle里面的rac集群,可以保证多节点并行写入数据比较类似PXC,目前不是很成熟,不建议使用。
E:设置查询SQL的超时(max_execution_time)
5.7.4引入,max_execution_time
Show full processlist;
查看正在执行的线程号。
F:执行计划的增强
Mysql5.7之前,优化器是性能瓶颈点。5.7之后改善了很多功能。比如in语句子查询优化,mysql5.7的in查询能够使用index range scan 方式,union all 不在产生临时表,新增更多HINTS,并提供HINTS语法。