5.7新特性(总结)

一.安全方面增强

1.mysql.user表变化

  1. mysql.user表中的plugin更改成not null
  2. 少了一个字段Password
  3. 多了三个字段password_last_changedpassword_lifetimeaccount_locked
  4. 5.7开始不再支持mysql_old_password的认证插件,推荐全部使用mysql_native_password。
  5. 可以设置账号的过期时间
  6. 可以对账号执行加锁或者解锁功能。

2.数据库初始化方式变更

  • mysql5.7之前使用的是/scripts/mysql_install_db,默认root账号没有密码
  • mysql5.7之后使用的是bin/mysqld
    • 默认会生成一个root的随机密码
    • 不再创建匿名用户
    • 不再创建test database

二.sql模式改变

默认启用严格的sql模式

  • mysql5.6
mysql> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode                                 |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)
  • mysql5.7
mysql> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@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 row in set (0.00 sec)

三.DDL语法改进

ALTER TABLE现在支持重命名索引的RENAME INDEX子句

  • mysql5.6(不支持这种语法,执行报错)
mysql> alter table test4 rename index idx_data to idx_data1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'index idx_data to idx_data1' at line 1
  • mysql5.7
mysql> alter table test4 rename index idx_data to idx_data1;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

四.Innodb引擎增强

1.online ddl改进

VARCHAR列大小可以使用一个in-place ALTER表来增加,如下例所示:

ALTER TABLE tbl_name CHANGE COLUMN c1 c1 VARCHAR(255), ALGORITHM=INPLACE, LOCK=NONE;


以下两种情况的修改字段长度的ddl,可以使用in-place方式

  • VARCHAR列大小从0增加到255字节(utf8一个字符为3个字节,也就是从varchar(0)到85)
mysql>   alter table sbtest4  ALGORITHM=INPLACE,modify test1 varchar(85) not null default '';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>   alter table sbtest4  ALGORITHM=INPLACE,modify test1 varchar(86) not null default ''; 
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
  • 从256字节增加到更大的大小(utf8一个字符为3个字节,也就是从varchar(86)到更多)
mysql> alter table sbtest4 add test2 varchar(86) not null default '';
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>   alter table sbtest4  ALGORITHM=INPLACE,modify test2 varchar(200) not null default '';   
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

其他情况还是要使用copy方式,拷贝整个表(速度慢,堵塞dml)

mysql> show create table sbtest2;
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                                                                                                         |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sbtest2 | CREATE TABLE `sbtest2` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  `test1` varchar(85) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `idx_k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=10000001 DEFAULT CHARSET=utf8 MAX_ROWS=1000000

mysql> alter table sbtest2 modify test1 varchar(86) not null default '';                   
    Query OK, 9998981 rows affected (4 min 3.38 sec)
Records: 9998981  Duplicates: 0  Warnings: 0

2.InnoDB缓冲池转储和加载操作得到了增强

  • mysql5.6
mysql> show variables like '%dump%';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| innodb_buffer_pool_dump_at_shutdown | OFF   |
| innodb_buffer_pool_dump_now         | OFF   |
+-------------------------------------+-------+
2 rows in set (0.00 sec)
  • mysql5.7
mysql> show variables like '%dump%';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| innodb_buffer_pool_dump_at_shutdown | ON    |
| innodb_buffer_pool_dump_now         | OFF   |
| innodb_buffer_pool_dump_pct         | 25    |
+-------------------------------------+-------+
3 rows in set (0.00 sec)

一个新的系统变量innodb_buffer_pool_dump_pct允许您指定每个缓冲池中要读取和转储的最近使用页面的百分比。默认25%

3.支持缓冲池大小在线变更

innodb_buffer_pool_size参数是动态的,允许您在不重启服务器的情况下调整缓冲池的大小。调整大小的操作(包括将页面移动到内存中的新位置)是以块的形式执行的。块大小可以使用新的innodb_buffer_pool_chunk_size配置选项进行配置。可以使用新的Innodb_buffer_pool_resize_status变量监视调整大小的过程。

4.支持回收(收缩)undo log回滚日志物理文件空间

可以truncate驻留在undo表空间中的undo日志。这个特性是使用innodb_undo_log_truncate配置选项启用的。

5.支持为innodb表建立通用表空间

InnoDB支持使用CREATE TABLESPACE语法创建通用表空间。

CREATE TABLESPACE `tablespace_name`
  ADD DATAFILE 'file_name.ibd'
  [FILE_BLOCK_SIZE = n]

一般表空间可以在MySQL数据目录之外创建,能够保存多个表,并支持所有行格式的表。

五.引入JSON列类型及相关函数

从MySQL 5.7.8开始,MySQL开始支持一种原生JSON类型。JSON值不存储为字符串,而是使用允许快速读取文档元素的内部二进制格式。每当插入或更新JSON列中存储的JSON文档时,都会自动验证它们,而无效的文档会产生错误。JSON文档在创建时是标准化的,可以使用大多数比较操作符进行比较,比如=、<、<=、>、>=、<>、!=和<=>

六.新增sys这个database

MySQL发行版现在包括sys模式,它是一组对象,帮助dba和开发人员解释性能模式收集的数据。sys schema对象可用于典型的调优和诊断用例。

七.支持为表增加计算列

MySQL现在支持在CREATE TABLE和ALTER TABLE语句
中生成列的规范。生成列的值从列创建时指定的表达式计算。生成的列可以是虚拟的(在读取行时“动态计算”),也可以是存储的(在插入或更新行时计算)。

八.支持多源复制

现在可以进行多源复制。MySQL多源复制增加了从多个主服务器复制到从服务器的能力。MySQL多源复制拓扑可用于将多个服务器备份到单个服务器,合并表碎片,并将多个服务器的数据合并到单个服务器
作为MySQL多源复制的一部分,添加了复制通道。复制通道允许从服务器打开多个连接进行复制,每个通道都是到主服务器的连接。

九.支持mgr

MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供,实现了分布式下数据的最终一致性,总结MGR特点如下
高一致性:基于分布式paxos协议实现组复制,保证数据一致性
高容错性:自动检测机制,只要不是大多数节点都宕机就可以继续工作,内置防脑裂保护机制
高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据,直到与其他节点数据一致
高灵活性:提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主节点进行,多主模式支持多节点写入。

十.支持基于组提交的并行复制

MySQL 5.7才可称为真正的并行复制,这其中最为主要的原因就是slave服务器的回放与主机是一致的即master服务器上是怎么并行执行的slave上就怎样进行并行回放。不再有库的并行复制限制,对于二进制日志格式也无特殊的要求(基于库的并行复制也没有要求)。
MySQL 5.7并行复制的思想简单易懂,一言以蔽之: 一个组提交的事务都是可以并行回放 ,因为这些事务都已进入到事务的prepare阶段,则说明事务之间没有任何冲突(否则就不可能提交)。

为了兼容MySQL 5.6基于库的并行复制,5.7引入了新的变量slave-parallel-type,其可以配置的值有:

  • DATABASE:默认值,基于库的并行复制方式
  • LOGICAL_CLOCK:基于组提交的并行复制方式

十一.支持无损半同步复制

  • mysql5.6
    after_commit,可能会丢数据
  • myql5.7
    支持无损半同步复制,after_sync,不会丢数据

MySQL5.7在Master事务提交的时间方面做了改进(rpl_semi_sync_master_wait_point
:AFTER_COMMIT\AFTER_SYNC【默认】),事务是在提交之前发送给Slave(默认,after_sync),当Slave没有接收成功,并且Master宕机了,不会导致主从不一致,因为此时主还没有提交,所以主从都没有数据。

十二.gtid复制改进

  • mysql5.6
开启gtid复制方式后,必须开启log_slave_updates参数,否则启动会报错,因为需要在binlog里面找到同步复制的信息
  • mysql5.7
不需要开启log_slave_updates参数,因为用一张gtid_executed表来记录同步复制的信息
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容