温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL 8.0.23新特性有哪些

发布时间:2021-10-22 09:39:04 来源:亿速云 阅读:204 作者:iii 栏目:数据库
# MySQL 8.0.23新特性深度解析 ## 引言 MySQL作为全球最流行的开源关系型数据库之一,其每个版本的更新都备受开发者关注。2021年1月18日,Oracle正式发布了MySQL 8.0.23版本,这是MySQL 8.0系列的第23个维护版本。本文将全面剖析MySQL 8.0.23引入的各项新特性、功能增强和性能改进,帮助数据库管理员和开发者更好地理解和使用这些新功能。 ## 一、核心新特性概览 ### 1.1 不可见列(Invisible Columns) ```sql -- 创建不可见列示例 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP INVISIBLE ); -- 查询时默认不显示不可见列 SELECT * FROM users; -- 不显示created_at列 -- 显式查询不可见列 SELECT id, name, created_at FROM users; 

实现原理: - 在数据字典中新增COLUMN_HIDDEN标志位 - 优化器处理查询时自动过滤不可见列 - 存储引擎层面无差异,仅元数据变化

应用场景: - 向后兼容的架构变更 - 敏感信息隐藏 - 临时列标记而不影响现有应用

1.2 表达式默认值(Expression Defaults)

-- 使用函数作为默认值 CREATE TABLE orders ( id INT PRIMARY KEY, order_date DATETIME DEFAULT (CURRENT_TIMESTAMP + INTERVAL 1 DAY), discount DECIMAL(5,2) DEFAULT (RAND() * 0.2) ); -- 支持JSON函数 CREATE TABLE products ( id INT PRIMARY KEY, metadata JSON DEFAULT (JSON_OBJECT('created_by', USER())) ); 

技术限制: - 不支持子查询和存储函数 - 必须用括号包围表达式 - 自增列仍必须使用AUTO_INCREMENT

二、性能优化增强

2.1 直方图统计改进

-- 创建直方图统计 ANALYZE TABLE customers UPDATE HISTOGRAM ON age, income WITH 100 BUCKETS; -- 查看直方图信息 SELECT * FROM INFORMATION_SCHEMA.COLUMN_STATISTICS; 

优化点: - 减少内存使用达40% - 处理速度提升25% - 支持更大数据量的统计收集

2.2 并行复制优化

# 配置参数示例 [mysqld] replica_parallel_workers = 8 replica_parallel_type = LOGICAL_CLOCK binlog_transaction_dependency_tracking = WRITESET 

性能对比

工作负载类型 8.0.22吞吐量 8.0.23吞吐量 提升幅度
OLTP读写混合 12,500 TPS 15,200 TPS 21.6%
批量插入 45,000行/秒 58,000行/秒 28.9%

三、安全增强

3.1 密码验证策略改进

-- 全局密码策略设置 SET GLOBAL validate_password.policy = STRONG; SET GLOBAL validate_password.length = 12; SET GLOBAL validate_password.mixed_case_count = 2; SET GLOBAL validate_password.special_char_count = 1; -- 用户密码修改验证 ALTER USER 'app_user'@'%' IDENTIFIED BY 'N3wP@ssw0rd!'; 

新策略要求: 1. 禁止使用最近5次用过的密码 2. 密码必须包含大小写字母组合 3. 特殊字符最少数量要求 4. 最大密码年龄限制(可配置)

3.2 权限管理增强

-- 新的动态权限 GRANT BINLOG_ENCRYPTION_ADMIN ON *.* TO 'admin_user'@'%'; GRANT CONNECTION_ADMIN ON *.* TO 'monitor_user'@'%'; -- 权限限制更精细 REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'legacy_user'@'%'; GRANT SELECT, INSERT ON db1.* TO 'legacy_user'@'%'; 

四、JSON功能增强

4.1 JSON合并函数改进

-- JSON_MERGE_PATCH替代已弃用的JSON_MERGE SELECT JSON_MERGE_PATCH( '{"name": "Alice", "age": 25}', '{"age": 26, "city": "NY"}' ) AS result; /* 输出: {"name": "Alice", "age": 26, "city": "NY"} */ -- JSON_MERGE_PRESERVE保持所有值 SELECT JSON_MERGE_PRESERVE( '{"items": ["book"]}', '{"items": ["pen"]}' ) AS result; /* 输出: {"items": ["book", "pen"]} */ 

4.2 JSON路径表达式优化

-- 新的日期处理函数 SELECT JSON_EXTRACT( '{"event": "login", "time": "2023-01-15"}', '$.time' RETURNING DATE ) AS event_date; -- 类型转换增强 SELECT JSON_EXTRACT( '{"price": "19.99"}', '$.price' RETURNING DECIMAL(5,2) ) AS numeric_price; 

五、高可用性改进

5.1 克隆插件增强

-- 远程克隆操作简化 INSTALL PLUGIN clone SONAME 'mysql_clone.so'; CREATE USER clone_user@'%' IDENTIFIED BY 'password'; GRANT BACKUP_ADMIN ON *.* TO clone_user@'%'; -- 执行远程克隆 CLONE INSTANCE FROM 'user@source_host:3306' IDENTIFIED BY 'password' DATA DIRECTORY = '/path/to/clone'; 

性能改进: - 网络压缩效率提升30% - 大表克隆速度提高40% - 支持断点续传功能

5.2 组复制改进

-- 新的事务一致性级别 SET GLOBAL group_replication_consistency = 'BEFORE_ON_PRIMARY_FLOVER'; -- 成员自动重新加入配置 SET GLOBAL group_replication_autorejoin_tries = 3; SET GLOBAL group_replication_autorejoin_timeout = 300; 

六、InnoDB存储引擎优化

6.1 原子DDL扩展

-- 支持更多原子DDL操作 CREATE TABLE t1 (id INT) ENGINE=InnoDB; DROP TABLE t1, t2; -- 原子操作,要么全部成功要么全部失败 -- 索引操作原子性 CREATE INDEX idx_name ON large_table(name); -- 失败时自动回滚 

支持的DDL类型: - 表空间操作 - 用户管理操作 - 角色管理操作 - 资源组操作

6.2 临时表空间管理

-- 查看临时表空间信息 SELECT * FROM INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO; -- 配置临时表空间 SET GLOBAL innodb_temp_tablespaces_dir = '/new/tmp/dir'; SET GLOBAL innodb_temp_data_file_path = 'ibtmp1:12M:autoextend'; 

七、监控与诊断增强

7.1 性能模式扩展

-- 新添加的监控表 SELECT * FROM performance_schema.replication_applier_status_by_worker; SELECT * FROM performance_schema.memory_summary_by_thread_by_event_name; -- 错误日志监控 SELECT * FROM performance_schema.error_log; 

7.2 资源组增强

-- 创建资源组 CREATE RESOURCE GROUP batch_group TYPE = USER VCPU = 2-3 THREAD_PRIORITY = 15; -- 分配线程到资源组 SET RESOURCE GROUP batch_group FOR 45; 

八、兼容性与标准支持

8.1 SQL标准兼容性改进

-- 增强的WITH子句 WITH RECURSIVE cte AS ( SELECT 1 AS n UNION ALL SELECT n + 1 FROM cte WHERE n < 100 ) SELECT * FROM cte; -- 更好的窗口函数支持 SELECT id, name, salary, AVG(salary) OVER (PARTITION BY dept ORDER BY hire_date ROWS 2 PRECEDING) FROM employees; 

8.2 数据类型扩展

-- 新的数据类型处理 CREATE TABLE geom_data ( id INT PRIMARY KEY, location GEOMETRY SRID 4326, attributes JSON NOT NULL ); -- 增强的CAST操作 SELECT CAST('123.45' AS DECIMAL(5,2)) AS amount; 

九、工具与实用程序更新

9.1 mysql客户端增强

# 新命令行选项 mysql --binary-as-hex --connect-timeout=30 --ssl-mode=VERIFY_IDENTITY # 改进的交互模式 \watch 5 # 每5秒刷新查询结果 \histignore *UPDATE* # 忽略包含UPDATE的历史命令 

9.2 备份工具改进

# 增强的mysqldump mysqldump --where="date > '2023-01-01'" --include-triggers --skip-generated-invisible-primary-key # mysqlpump并行备份 mysqlpump --parallel-schemas=4 --compress-output=LZ4 

十、弃用与移除功能

10.1 已弃用功能

  1. JSON_MERGE()函数(改用JSON_MERGE_PATCHJSON_MERGE_PRESERVE)
  2. GROUP BY隐式排序(需显式使用ORDER BY)
  3. ENCODE()/DECODE()加密函数

10.2 配置参数变更

# 已移除的参数 # - innodb_undo_logs (改用innodb_rollback_segments) # - query_cache_type (查询缓存已移除) 

结论

MySQL 8.0.23版本在功能丰富性、性能表现和安全合规方面都做出了显著改进。从不可见列这样的创新功能到表达式默认值这样的实用增强,再到各项性能优化和安全加固,这个版本为数据库管理员和开发者提供了更强大、更灵活的工具集。

随着MySQL的持续演进,8.0.23版本再次证明了其在关系型数据库领域的领先地位。建议所有使用MySQL 8.0系列的用户评估升级到此版本,以充分利用这些新特性和改进。

附录

A. 升级注意事项

  1. 检查兼容性:mysqlcheck --check-upgrade
  2. 备份策略:使用增强的克隆或备份工具
  3. 测试关键业务SQL的性能变化

B. 已知问题与解决方案

问题描述 解决方案
某些JDBC驱动兼容性问题 升级到最新Connector/J 8.0.23+
旧版本复制兼容性 设置binlog_format=ROW
内存使用增加 调整innodb_buffer_pool_size

C. 参考资源

  1. MySQL 8.0.23 Release Notes
  2. MySQL Server Blog
  3. MySQL Performance Schema文档

”`

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI