MySQL 5.7.6 新特性总结
转的,作为备份
MySQL 5.7.6- M16 Milestone 于2015年3月9日发布,包含若干新特性,这里总结其中比较有意思的更新。如果希望了解全部更新,请移步: MySQL 5.7 Release Notes
1. 编译
MySQL从5.7.5开始,源码编译时依赖boost库,需要提前下载好boost 库才能通过编译,当前依赖boost版本为1.57
2.安装
既可以通过以前的mysql_install_db安装,也可以直接通过mysqld安装
bin/mysqld --initialize --user=mysql
详细设置请查看:http://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html
3.CREATE USER,ALTER USER支持更多功能
a)限制用户可以使用的资源,比如用户每小时可以执行的SQL个数,用户级别的的Max_connections等
例如:
# 设置用户每小时只能执行500次查询,100次更新 CREATE USER 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;
b)设置密码过期时间
例如:
#设置密码永不过期 CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER; #密码每隔180天必须修改一次 CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
c)可以锁定用户,用户被锁定以后,无法登陆(不影响已经登录的用户)
#将用户锁定 ALTER USER mysql@'127.0.0.1' ACCOUNT LOCK; #将用户解锁 ALTER USER mysql@'127.0.0.1' ACCOUNT UNLOCK;
d)支持SSL设置
详细设置请查看:http://dev.mysql.com/doc/refman/5.7/en/create-user.html
4.支持SHOW CREATE USER
#查看创建用户的SQL SHOW CREATE USER mysql@'127.0.0.1';
5.Generated Columns
在CREATE/ALTER TABLE时,支持通过已有的列生成另外其他列,比如:
#创建用户表,其中full_name为生成列
CREATE TABLE t1 (
first_name VARCHAR(10),
last_name VARCHAR(10),
full_name VARCHAR(255) AS (CONCAT(first_name,' ',last_name))
);
insert into t1(first_name, last_name) values('Jim', 'Gray');
select * from t1;
#'Jim','Gray', 'Jim Gray'
默认情况下生成列是VIRTUAL的,也就是说存储引擎在文件中没有存储这一列,生成的列是在查询时动态计算的,所以不可以在VIRTUAL的生成列上创建索引。而在通过关键字STORED指定时,生成列会被物化到文件,可以被索引,因此可以用这种做法来实现“函数索引”。
详细信息请查看:http://dev.mysql.com/doc/refman/5.7/en/create-table.html
6.子查询优化
支持将FROM子句中的子查询merge到外部查询,以便更好的支持Index Condition Pushdown
7.支持配置项secure_file_priv
为了更加安全,防止LOAD DATA等破坏和泄露系统数据,可以把secure_file_priv设置为文件系统的某个目录的路径,表示LOAD DATA,SELECT ... INTO OUTFILE,LOAD_FILE()只可以将数据导入或导出到指定目录
详细信息请查看:http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
8.空间数据支持
支持更多空间运算的函数,GIS使用Boost.Geometry.Rtree提高性能等
9.internal_tmp_disk_storage_engine的默认值改为InnoDB
internal_tmp_disk_storage_engine是MySQL 5.7.5引入的变量,用于指定MySQL内部临时表的存储引擎。也就是说MySQL 5.7.6默认的内部临时表将会是InnoDB
10.MERGE_THRESHOLD可配置
MERGE_THRESHOLD指的是InnoDB在更新/删除数据时,当InnoDB索引页的填充量小于给定值时,InnoDB会尝试合并相邻的索引页,以前这个值硬编码为50。MySQL 5.7.6中在CREATE/ALTER TABLE时,可以在注释中指定
CREATE TABLE t1 (
id INT,
KEY id_index (id)
) COMMENT='MERGE_THRESHOLD=45';
详细信息请查看:http://dev.mysql.com/doc/refman/5.7/en/index-page-merge-threshold.html
11.刷脏页优化
a.调整刷脏页策略
b.提高page_cleaner线程优先级等
c.当修改的最旧LSN接近max_modified_age_sync时,用户线程会等到设定的目标LSN,而不是等待全部刷新完成
12.用户可以创建自定义表空间
CREATE TABLESPACE `ts2` ADD DATAFILE 'ts2.ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;
详细信息请查看:http://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html
13.Group Commit优化
在innodb_flush_log_at_trx_commit=1时,刷REDO日志前,先收集当前并发事务的日志,再批量刷磁盘
14.主从复制模式可动态改变
比如设置gtid_mode,动态开关GTID
15.支持Milti-Source Replication
可以将多个MySQL的数据,汇聚到一台MySQL中
16.并行复制新模式
以前MySQL的并行复制局限于Database级别,通过设置slave_parallel_type=LOGICAL_CLOCK,如果2个事务无依赖关系,它们在从库上就可以并发执行
17.SQL_LOG_BIN只支持Session级别修改
SET GLOBAL SQL_LOG_BIN = 0/1执行时报错,SQL_LOG_BIN是一个纠结的选项,在MySQL 5.1的时候,这是一个Session级别的选项,从MySQL 5.5开始,支持Global级别的设置,MySQL 5.7.6又把Global级别的去掉了。(感谢邱浩给出补充)
18. InnoDB大页面支持
为更好的支持压缩,InnoDB支持32K,64K的页面,默认值仍然是16K

浙公网安备 33010602011771号