首页 > 数据库 > MySQL > mysql 5.7增加新特性介绍
增加特性
1.1 安全性增加
用户表mysql.user的plugin字段不允许为空,默认值是mysql_native_password,而不是mysql_old_password,如果该字段为口,用户将被禁用,使用mysql_native_password代替mysql_old_password格式。增加密码过期机制,过期后需要修改密码。管理员可以对普通账号进行加锁。通过使用OpenSSL编译的软件包,在数据库启动中可以自动地生成SSL、RSA证书和key文件,客户端在建立连接时更安全可靠,MySQL拥有的mysql_ssl_rsa_setup也创建相关证书和key文件。MySQL默认使用mysqld –initialize进行初始化,初始化进程仅仅创建一个root账号:‘root’@‘localhost’,在error log文件中产生一个随机密码,并标记密码过期,需要尽快使用root账号登录进行密码修改。初始化进程不创建佚名账号,也不创建test数据库。
desc user;
|Field | Type | Null | Key | Default | Extra
|plugin | char(64) | NO | | mysql_native_password |
|password_expired| enum('N','Y') | NO | | N | |
|password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint(5) unsigned| YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
1.2 SQL mode改变
STRICT_TRANS_TABLES和ONLY_FULL_GROUP_BY模式默认被启用,ONLY_FULL_GROUP_BY允许明确查询,阻止包括表达式的模糊查询,不保证group by语句中的唯一性。ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE和NO_ZERO_IN_DATE模式默认也被启用,在后续版本逐渐被严格SQL模式替换。
|Variable_name|Value
|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,NO_ENGINE_SUBSTITUTION |
1.3 Online ALTER TABLE
对于所有的存储引擎,ALTER TABLE可以支持在线索引重命名。
1.4 ngram 和 Mecab full-text parser plugins
提供一个中午、日文、韩文语法分析器插件。
1.5 Innodb存储引擎增强
VARCHAR size可以使用alter table 在线增加,0到255内长度占用一个字节作为一个区间,256以上长度占用两个字节作为一个区间,区间内可以随意更改,不能夸区间更改,不能在线缩减长度。对于DDL语句,增加了create table,drop table,truncate table和alter table性能。
Innodb临时表元数据不在存储在Innodb系统表空间,innodb_temp_table_info包含所有用户和system元数据,由innodb_temp_data_file_path制定路径,在系统启动时创建。数据表、压缩的临时表和相关对象的undo log(新类型)被存在临时表空间里。
Innodb支持大数据类型,在5.6及以前的版本,作为二进制BLOB数据,现在被定义为一个内部新数据类型:DATA_GEOMETRY。Innochecksum功能被增强。通过增加innodb_buffer_pool_dump_pct和innodb_io_capacity参数增强数据dump和load功能。支持innodb_page_cleaners选项可设置多个page cleaner线程提高脏页刷新效率,默认值是1,从5.6版本开始脱离Innodb主线程,引入1个清脏页的线程。支持使用DDL语句重建分区表:optimize table alter table …force alter table … engine=innodb.
在linux上Fusion-io Non-VOLATILE Memory(NVM)文件系统提供了自动写功能,InnoDB doublewrite buffer不在适用。从MySQL5.7.4I Innodb 表分区可以使用传输表空间进行备份和不同实例之间的拷贝。从MySQL5.7.5 innodb_buffer_pool_size参数可以动态更改,内存页大小由innodb_buffer_pool_chunk_size指定,可以使用Innodb_buffer_pool_resize_status监控,支持大数据类型SPATIAL索引,在关闭数据库和恢复过程都可以使用多线程innodb_page_cleaners;full-text进行索引创建或重建(sorted index build),InnoDB可以进行大量数据load,大大增加了索引创建的效率,innodb_fill_factor限制了每页数据量,剩余给将来索引增加使用;引入了新的日志记录类型(mlog_file_name),简化了表空间的恢复,不用扫描大量日志进行恢复;可以设置innodb_undo_log_truncate删除不用的undo 表空间。从5.7.6 Inoodb 支持本地分区,不在依赖ha_partition handler,减少了内存的使用;使用create tablespace可以创建普通用户的表空间,可以创建在 MySQL目录外边,可以包含多个表。
Create tablesapce ‘tab_name’ add datafile ‘file.ibd’ file_block_size = n;
从5.7.9以后版本可以在客户端使用alter table .. upgrade partitioning命令升级由ha_partition handler 创建的分区;DYNAMIC代替COMPACT作为默认的Innodb 表的行格式,提供innodb_default_row_format参数可以修改。
System和status变量值也可以在 information_schema查看,增加sys schema帮助dba和开发人员进行性能调优和故障诊断。
支持对在线某个连接直接查看执行计划,比如EXPLAIN FOR CONNECTION 1024
一个表可以支持多个触发器。
在CREATE | ALTER TABLE时,可以在某张表已有列的基础上,对新增的列进行运算。
Mysql client 可以增加 –syslog选型把错误日志发送给syslog。
在MySQL 5.6以前,在客户端CTRL+C后会直接退出啊MySQL客户端,在5.7以后不会退出客户端而是终端当前的操作。
利用mysqlbinlog,在使用二进制文件恢复时可以改变数据库的名字。
--rewrite-db=’dboldname ->dbnewname’。
在5.7.3后续版本,在Innodb或MyISAM存储引擎上的分区表查询,可以利用索引下推功能。
在5.7.5 alter table … exchange partition支持 {with|without validation},with validation代表row-by-rwo确认。
在5.7.2后续版本多个线程能并发读二进制日志文件,当客户写二进制文件时dump进程也可以读。
在mysql5.7.4 引入了gb18030字符集,它支持中国本地GB18030字符集。
主复制线程可以更改,但是依赖从线程sql状态和从线程I/O状态。
INNODB作为默认的存储引擎
支持多源复制
一些新性能表可以监控组复制
| innodb_io_capacity | 200 |
| innodb_io_capacity_max | 2000 |
| innodb_buffer_pool_dump_now | OFF |
| innodb_buffer_pool_dump_pct | 25
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16167282/viewspace-1827428/ ,如需转载,请注明出处,否则将追究法律责任。