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

 

posted @ 2015-03-13 16:58  博路  阅读(437)  评论(0)    收藏  举报