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;
posted @ 2022-03-08 19:02  西瓜的春天  阅读(319)  评论(0)    收藏  举报