01-MySQL5.7特性
MySQL 5.7与MySQL 5.5功能改进区别
MySQL 5.7 比起 MySQL 5.5,在主从同步方面有了巨大的改进,最大的改进是引入了 GTID和无损半同步复制(lossless semi-sync)。
- GTID
- 在使用 GTID 的前提下,可以提供非常好的多源复制、并行复制的支持。
- 在没有 GTID 同步的情况下,MySQL 5.5 将无法支持双主架构的自动切换,只能够采取最传统的主从架构,并且在主出现故障时人工介入,手工实现切换。
- 无损半同步复制
- 由于缺乏无损半同步的支持,MySQL 5.7 之前的版本,在极端情况下(主库彻底崩溃,出现数据丢失,例如硬盘故障、服务器掉电等),可能会出现数据尚未同步到从库从而出现丢失的情况。
- MySQL 5.7 的无损半同步可以完全避免这种情况的出现,确保数据安全、数据一致性。
MySQL 5.7 相对 MySQL 5.5 引入了大量的新功能,不一一介绍,在此介绍部分特别重要的
-
在线修改
buffer_pool_size-
MySQL 5.7 可以在线修改 InnoDB 的 buffer pool size,无需重启。从而可以根据实际内存使用情况做动态调整。例如,如果发现连接数比预期的多,连接使用了过多的内存导致系统可用内存不足,MySQL 5.7 可以直接调低 InnoDB 的 buffer pool size 来释放一部分内存
-
MySQL 5.5 修改 InnoDB 的 buffer pool size 后,必须重启 MySQL 服务器才能生效。
-
-
在线添加 / 删除 / 重命名索引
MySQL 5.7 添加和删除索引可以在线操作,不会锁表,但是
- 如果主库压力比较大的情况,会对主库性能产生较大的影响;
- 如果业务有读写分离 在线添加索引会导致从库延时 影响业务(建议大表或者业务繁忙的表 尽量借用 ghost 在线添加)
-
MySQL 5.5 添加和删除索引的过程会锁表。MySQL 5.5 不支持重命名索引,只能删除重建。
-
在线 DDL
-
MySQL 5.7 的部分 DDL 语句可以支持在线修改,不会锁表,例如删除列、修改列顺序、修改列的默认值等。详细的情况可以参看 完整的表格
-
MySQL 5.7 使用的在线 DDL 方式比 MySQL 5.5 的阻塞方式,在绝大多数情况下都会更快。不过在某些特殊情况下(例如这个表的写负载比较高),可能会出现在线 DDL 比阻塞方式反而变慢了很多的情况。在这种情况下,可以强行将 DDL 改为阻塞模式。以
ALTER TABLE为例,可以通过指定ALGORITHM=COPY,强制使用 MySQL 5.5 的复制表的阻塞方式:
-
ALTER TABLE xxx ADD COLUMN xxx after xxx, ALGORITHM=COPY;
-
DDL 语句进度追踪
MySQL 5.7 可以开启追踪功能,追踪 DDL 的执行进度,从而可以评估 DDL 语句的执行时间。Dumbo 已经默认为实例开启了追踪功能,查看 DDL 语句进度的方法为:
SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_current;
-
JSON 支持
MySQL 5.7 支持原生的 JSON 数据类型。
-
InnoDB 的全文索引支持
MySQL 5.7 支持 InnoDB 的全文索引。

浙公网安备 33010602011771号