MySQL8.0版本升级内容总结

MySQL 8.0 是一个重大的版本升级,带来了大量性能提升、功能增强和安全改进。相比于 MySQL 5.7,它可以说是“代际”的飞跃。

以下是 MySQL 8.0 主要升级内容的详细梳理和总结,可以分为几个核心类别:


一、性能与 scalability(可扩展性)的重大提升

  1. 全新的数据字典

    • 5.7及之前:表结构信息(元数据)存储在 .frm 文件、MyISAM 系统表和一些存储引擎中。
    • 8.0:将所有数据字典信息整合到 InnoDB 引擎的表中,并存储在一个单独的 mysql.ibd 表空间里。
    • 好处
      • 原子性DDL:支持了事务性的 DDL(如 CREATE, ALTER, DROP),要么完全成功,要么回滚,避免了元数据不一致的风险。这是一个里程碑式的特性
      • 崩溃安全:元数据现在由支持事务的 InnoDB 管理,系统崩溃不会导致数据字典损坏。
      • 性能提升:消除了文件系统操作和元数据锁(MDL)的争用,提高了信息模式(INFORMATION_SCHEMA)的查询速度。
  2. 增强的索引功能

    • 隐藏索引:可以将一个索引标记为“不可见”,优化器在生成执行计划时会忽略它。用于测试删除某个索引后对查询性能的实际影响,而无需真正删除它(删除和重建大表索引代价很高)。
    • 降序索引真正支持降序索引。在 5.7 中,即使创建了降序索引,实际上也是按升序处理的。8.0 的降序索引可以显著优化 ORDER BY column DESC 这类查询的性能。
    • 函数索引:可以创建基于函数或表达式的索引。例如,可以为 JSON 文档中的某个字段创建索引 CREATE INDEX idx_name ON users ( (JSON_EXTRACT(data, '$.last_name')) ),极大地提升了相关查询的速度。
  3. 通用表表达式

    • 支持 CTE:引入了 WITH 子句,支持通用表表达式(Common Table Expressions),包括递归 CTE。这使得编写复杂的递归查询(如查询树形结构、组织架构)变得非常简单和高效,不再需要依赖繁琐的存储过程。
  4. 窗口函数

    • 分析函数:引入了强大的 SQL:1999 标准窗口函数,如 ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), LAG(), NTILE() 等。
    • 好处:无需使用复杂的自连接或子查询就能完成高级分析任务,例如“计算每个部门薪水排名”、“计算移动平均”等,代码更简洁,性能大幅提升。
  5. redo log 优化

    • redo log 持久化:redo log 写入现在是无锁的并且完全有序,减少了并发事务间的争用。
    • 改进了刷新策略:提供了更好的 redo log 刷新控制,有助于提升高并发写操作的性能。

二、JSON 功能的巨大增强

  1. JSON 数据类型增强

    • 提供了更多操作 JSON 的内置函数,如 JSON_OBJECTAGG(), JSON_ARRAYAGG() 用于聚合数据成 JSON 格式。
    • 引入了 JSON_TABLE() 函数,可以将 JSON 数据转换为关系表格式进行查询,实现了 JSON 和关系型数据之间的无缝转换。
    • 增加了 JSON_PATH 表达式,提升了 JSON 查询的性能和灵活性。
    • 对 JSON 文档的部分更新(JSON_MERGE_PATCH)效率更高。
  2. JSON 文档验证

    • 在插入和更新时,会自动验证 JSON 文档的格式是否正确,避免了无效 JSON 数据存入数据库。

三、SQL 功能与可用性改进

  1. 角色

    • 引入了真正的数据库“角色”概念。可以创建角色,为角色分配权限,然后将角色授予给多个用户。这极大地简化了权限管理,特别是在用户众多、权限模型复杂的场景下。
  2. 新的字符集与排序规则

    • 默认字符集从 latin1 改为 utf8mb4,更好地支持全球化和 emoji 表情符号。
    • 默认的排序规则改为 utf8mb4_0900_ai_ci(基于 Unicode 9.0 标准,不区分重音和大小写),提供了更准确、更快速的字符串比较和排序。
  3. 原子 DDL

    • 如前所述,大多数 DDL 操作(CREATE, ALTER, DROP 等)现在是原子性的,保证了数据字典的一致性。
  4. 不可见列

    • 可以创建“不可见”的列。对于 SELECT * 查询,该列不会被返回,必须显式指定列名才能查询到。适用于 schema 演进,可以在不影响现有应用的情况下增加新字段。
  5. 资源组

    • 允许将服务器线程绑定到特定的 CPU 上,并为线程设置优先级。这使 DBA 能够优化系统资源分配,确保关键任务获得更多 CPU 资源。
  6. 持久化全局变量

    • 使用 SET PERSIST 命令修改变量,改动会立即生效并且写入 mysqld-auto.cnf 配置文件,服务器重启后配置依然保留。避免了手动修改 my.cnf 文件容易出错的问题。

四、安全性与账户管理

  1. 新的密码策略

    • 默认的身份验证插件从 mysql_native_password 改为更安全的 caching_sha2_password。提供了更好的安全性,但可能在连接旧版本客户端时需要注意兼容性问题(需要更新客户端驱动或配置)。
    • 支持密码有效期、密码重用限制、密码验证要求(修改密码需提供旧密码)等更严格的策略。
  2. 动态权限

    • 引入了更细粒度的“动态权限”,例如 APPLICATION_PASSWORD_ADMIN, BACKUP_ADMIN, SYSTEM_VARIABLES_ADMIN 等,实现了更精细的权限控制,不再需要授予超级用户权限。

五、InnoDB 存储引擎增强

  1. 自增序列持久化

    • 自增计数器(AUTO_INCREMENT)会在每次变化时写入 redo log,并在检查点刷盘。服务器重启后不会再出现重复使用旧值的情况(5.7 及之前重启后可能重用之前分配的值)。
  2. 死锁检测优化

    • 改进了死锁检测机制,在高并发系统上性能更好。
  3. 表空间管理

    • 支持 ALTER TABLESPACE ... RENAME TO 重命名通用表空间。

六、废弃和移除的功能

  • 移除了查询缓存功能。由于在多核机器和高并发负载下,查询缓存的有效性很低且容易成为瓶颈,官方决定彻底移除它。
  • 移除了 password() 函数,使用更安全的认证方式。
  • 废弃了部分加密函数,如 ENCODE(), DECODE(),推荐使用 AES_ENCRYPT(), AES_DECRYPT()

总结

特性类别MySQL 5.7MySQL 8.0升级意义
数据字典文件+MyISAM表InnoDB事务表原子性DDL、崩溃安全、性能提升
SQL能力基础窗口函数、CTE(含递归)复杂查询能力质的飞跃
索引基础隐藏索引、降序索引、函数索引DBA 优化和维护的利器,性能优化手段更多
JSON基础支持强大函数、部分更新、验证文档模型处理能力显著增强
管理性角色、资源组、持久化变量DBA 管理效率和精细化程度大幅提升
安全性传统新密码插件、动态权限默认更安全,权限控制更精细
性能基础良好redo log优化、自增持久化高并发场景下更稳定、性能更高

升级建议
MySQL 8.0 在性能、功能和安全方面都带来了巨大收益,是新项目的绝对首选。对于现有从 5.7 迁移到 8.0,需要仔细进行兼容性测试,特别是:

  1. 检查是否使用了已移除或废弃的功能(如查询缓存)。
  2. 验证客户端驱动是否支持新的 caching_sha2_password 认证插件。
  3. 对关键业务SQL进行性能测试,因为优化器有了很大改进,执行计划可能发生变化。
### MySQL 8.0版本升级方法 对于MySQL 8.0的小版本升级,通常是指从一个次要版本(如8.0.x)升级到另一个更高级别的次要版本(如8.0.y)。这类升级相对较为简单和平滑,但仍需遵循一定的流程来确保数据库系统的稳定性。 #### 升级前准备 在执行任何类型的升级之前,备份现有数据至关重要。这不仅限于表中的实际数据,还包括配置文件和其他可能影响运行环境的信息[^1]。确认当前使用的MySQL版本是否满足官方文档所规定的最低要求也是必不可少的一环;例如,在某些情况下,直接从小版本跳过几个修订号进行更新可能是可行的,但这取决于具体的产品发布说明。 #### 执行在线热备或冷备 如果业务允许的话,可以选择停机维护窗口来进行所谓的“冷备份”,即停止所有写入操作并关闭服务后再复制整个实例的数据目录作为安全副本。而当无法承受长时间中断时,则应考虑采用基于二进制日志或其他机制实现增量式的“热备份”。 #### 更新软件包 通过官方渠道获取最新的安装介质之后,按照平台特定的方式完成程序本身的替换工作——对于Linux发行版而言通常是利用yum/apt-get这样的工具处理RPM/DEB格式的分发包;Windows环境下则更多依赖MSI向导界面指引用户逐步前进直至结束。值得注意的是,部分场景下或许还需要手动调整一些参数设定以适应新特性带来的变化[^3]。 #### 验证与优化 一旦新的引擎开始正常运作起来以后,立即着手测试各项功能是否完好无损非常重要。除了常规查询性能外,特别关注那些涉及权限管理、字符集转换等方面可能出现的新情况。另外,依据实际情况适时作出必要的调优措施有助于进一步提升整体表现水平。 ```sql -- 检查服务器状态 SHOW VARIABLES LIKE 'version'; SELECT VERSION(); ``` #### 注意事项 - **兼容性评估**:尽管同属8系列内部的不同子版本间迁移理论上不存在结构性障碍,但在实施过程中仍要仔细阅读Release Notes了解是否存在潜在的风险点。 - **资源规划**:考虑到每次迭代都可能会引入额外开销,提前做好硬件资源配置预案十分必要。 - **监控反馈**:部署完毕后的短期内密切监视系统指标变动趋势,及时响应异常状况能够有效降低风险系数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值