MySQL 8.0 新增功能
-
数据字典
全新 Data Dictionary 设计
摒弃了 server 层定义的 frm 文件和其他非事务表,使用了一组 InnoDB 表来保持数据字典,支持事务特性;MySQL Server 8.0 现在包含一个事务数据字典,用于存储有关数据库对象的信息
之前的版本中,数据字典相关数据存储在元数据文件和非事务系统表中 -
DDL 原子性
原子 DDL 语句包含 data 数据字典更新,存储引擎操作,bin 日志写入到一个事务中,要么成功提交,要么回滚;
详情
; -
升级
新版本安装之后,下次启动时自动升级数据库字典表,DBA 可以调用 mysql_upgrade 手工升级数据字典; -
安全性和账号管理
- 现在,系统数据库中的授权表是 InnoDB(事务)表,
不兼容的变更
-
数据字典更改
MySQL Server 8.0 现在包含一个事务数据字典,用于存储有关数据库对象的信息
之前的版本中,数据字典相关数据存储在元数据文件和非事务系统表中 -
首选身份验证插件
caching_sha2_password 作为首选安全加密 mysql_native_password 插件,相对于 sha256_password 更安全,影响之前版本的客户端登陆。 -
配置变更
-
不兼容的变更
- MySQL server 不再提供通用分区支持,存储引擎自己负责分区处理,InnoDB,NDB支持,MyISAM 不支持;– 无影响;
- 删除了几个未使用的错误码,请查看 MySQL 8.0 删除的功能部分。
- 从 MySQL 8.0.11 开始,禁止 lower_case_table_names 使用与初始数据库使用不同的配置启动数据库。会导致数据字典字典排序规则不一样;
-
重要更改
默认字符集从 latin1 变更为 utf8mb4,以下系统变量受影响:- character_set_server 和 character_set_database 系统变量 的默认值 已从更改 latin1为utf8mb4
- collation_server和 collation_database 系统变量 的默认值 已从更改 latin1_swedish_ci为 utf8mb4_0900_ai_ci。
-
不兼容的变更
-
server 变更
+ -
InnoDB 变更
-
SQL 变更
MySQL 8.0 删除的功能
-
删除 innodb_locks_unsafe_for_binlog
-
删除 information_schema_stats
-
重命名 INFORMATION_SCHEMA 中 InnoDB 相关视图名称
旧名称 新名字 INNODB_SYS_COLUMNS INNODB_COLUMNS INNODB_SYS_DATAFILES INNODB_DATAFILES INNODB_SYS_FIELDS INNODB_FIELDS INNODB_SYS_FOREIGN INNODB_FOREIGN INNODB_SYS_FOREIGN_COLS INNODB_FOREIGN_COLS INNODB_SYS_INDEXES INNODB_INDEXES INNODB_SYS_TABLES INNODB_TABLES INNODB_SYS_TABLESPACES INNODB_TABLESPACES INNODB_SYS_TABLESTATS INNODB_TABLESTATS INNODB_SYS_VIRTUAL INNODB_VIRTUAL -
与账号管理相关以下功能已删除
- 使用 GRANT 创建用户,变更统一使用 CREATE USER;
- 使用 GRANT 修改权限(非指定权限),变更统一使用 ALTER USER;
- CREATE USER 和 GRANT 语法中的 IDENTIFIED BY PASSWORD ‘auth_string’,变更为 IDENTIFIED WITH auth_plugin AS ‘auth_string’;IDENTIFIED BY PASSWORD 已经移除;
- PASSWORD() 函数已经删除,同时 SET PASSWORD … = PASSWORD(‘auth_string’) 语法不再支持;
-
query cache 已经删除,同时以下功能也随即删除;
- FLUSH QUERY CACHE/RESET QUERY CACHE;
- 系统变量:query_cache_limit/query_cache_min_res_unit/query_cache_size/query_cache_type/query_cache_wlock_invalidate.
- 状态参数: Qcache_free_blocks, Qcache_free_memory, Qcache_hits, Qcache_inserts, Qcache_lowmem_prunes, Qcache_not_cached, Qcache_queries_in_cache, Qcache_total_blocks.
- 线程状态参数:checking privileges on cached query, checking query cache for query, invalidating query cache entries, sending cached result to client, storing result in query cache, Waiting for query cache lock.
- SQL_CACHE SELECT 语法
- SQL_NO_CACHE SELECT 未删除,但无效,后续删除;
- ndb_cache_check_time 系统变量未删除,但无效,后续删除;
- have_query_cache 保留,但值总是 ON,未来删除;
-
data 数据字典提供了 database 信息,server 不再检测 data 目录来查找 database,因此系统变量 –ignore-db-dir option 和 ignore_db_dirs 无用并且删除;
-
DDL 日志,也成为元数据日志,已经被移除。从 MySQL 8.0.3 开始,这部分功能被 innodb_ddl_log 数据表取代。
-
系统变量 tx_isolation/tx_read_only 已经删除,请使用 transaction_isolation/transaction_read_only;
-
sync_frm 系统变量被删除,因为 .frm 文件已经过时;
-
系统变量 secure_auth 和客户端选项 –secure-auth 已经删除,同时 CAPI mysql_options() 中的 MYSQL_SECURE_AUTH 已经删除;
-
系统变量 multi_range_count 已经删除;
-
系统变量 log_warnings 和 –log-warnings 已经删除,替换使用 log_error_verbosity;
-
sql_log_bin 系统变量全局属性删除,只保留 session 作用域,@@GLOBAL.sql_log_bin 不再使用;
-
metadata_locks_cache_size 和 metadata_locks_hash_instances 已经删除;
-
未使用的 date_format, datetime_format, time_format, 和 max_tmp_tables 已经删除;
-
SQL 兼容性模式:DB2,MAXDB, MSSQL,MYSQL323, MYSQL40,ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS 已经删除,不再能赋值给 sql_mode 和 mysqldump –compatible;
-
GROUP BY 不再是有序的,即默认的排序已经删除,需要有序,请额外添加 order by;
-
EXPLAIN 执行计划中 EXTENDED 和 PARTITIONS 已经删除,这些不再必须;
-
以下加密相关项已经删除:
- ENCODE() 和 DECODE();
- ENCRYPT()
-
DES_ENCRYPT()/DES_DECRYPT(), –des-key-file 选项, have_crypt 系统变量,FLUSH 语句中 DES_KEY_FILE , CMake 选项 HAVE_CRYPT ;
替换使用 SHA2() 和 AES_ENCRYPT()/AES_DECRYPT();
-空间数据类型的以下函数被删除,仅保留相应 ST_ 和 MBR 函数,详情请看官网;
-
解析器不再视 SQL 语句中 \N 为 NULL,请使用 NULL;
-
PROCEDURE ANALYSE() 语法已删除;
-
客户端–ssl和 –ssl-verify-server-cert选项已被删除。使用 –ssl-mode=REQUIRED代替–ssl=1或 –enable-ssl。使用 –ssl-mode=DISABLED替代–ssl=0,–skip-ssl或 –disable-ssl。使用 –ssl-mode=VERIFY_IDENTITY 代替–ssl-verify-server-cert 选项。(服务器端 –ssl选项保持不变。)
-
–temp-pool 选项删除;
-
ignore_builtin_innodb系统变量被移除
-
mysql_install_db 初始化已经删除,使用 mysqld 实现;
-
通用分区处理程序已经删除,存储引擎必须自己实现,–partition和 –skip-partition选项已经删除,
详情
; -
系统和状态变量信息不再保存在中INFORMATION_SCHEMA。这些表被删除: GLOBAL_VARIABLES, SESSION_VARIABLES, GLOBAL_STATUS, SESSION_STATUS。
-
performance_schema 中 setup_timers 表已删除,performance_timers 表中的 TICK 行也已删除。
-
嵌入式 libmysqld 库已经删除,相关的选项和测试程序删除:
-
mysql_plugin 工具删除,请使用 –plugin-load 或 –plugin-load-add 选项,或者 INSTALL PLUGIN 实现;
-
resolveip 工具删除,替换使用 nslookup, host, or dig;
-
resolve_stack_dump 工具删除;
-
大量错误码删除,
详情
-
INFORMATION_SCHEMA INNODB_LOCKS 和 INNODB_LOCK_WAITS 删除,替代使用 data_locks and data_lock_waits
-
InnoDB 不再支持压缩临时表;
-
InnoDB 不再支持创建 .isl 文件(InnoDB 符号链接文件),当在 data 目录外创建表空间文件,可以使用 innodb_directories 选项实现;
-
以下InnoDB文件格式变量已删除:
- innodb_file_format
- innodb_file_format_check
- innodb_file_format_max
-
innodb_large_prefix
文件格式变量对于创建与InnoDBMySQL 5.1 早期版本兼容的表是必需的 。既然MySQL 5.1的产品生命周期已经结束,则不再需要这些选项。
-
innodb_support_xa删除了支持XA事务中两阶段提交 的系统变量。InnoDB始终启用对XA事务中的两阶段提交的支持。
-
不再支持 DTrace 。
-
JSON_APPEND() 函数已删除。使用 JSON_ARRAY_APPEND() 代替。
-
InnoDB 在 MySQL 8.0.13 中删除了对将表分区放置在共享表空间中的支持。共享表空间包括 InnoDB 系统表空间和常规表空间。有关在共享表空间中标识分区并将其移至每个表文件表空间的信息,请参见第2.11.5节“为升级准备安装”。
-
支持 SET 在 MySQL 8.0.13 中弃用的语句中设置用户变量 。此功能可能会在MySQL 9.0中删除。
-
PERROR –ndb 选项已删除。请改用 ndb_perror 工具。
-
innodb_undo_logs 变量已删除。这些 innodb_rollback_segments 变量执行相同的功能。
-
Innodb_available_undo_logs 状态变量已删除。每个表空间的可用回滚段数可以使用 SHOW VARIABLES LIKE ‘innodb_rollback_segments’;
-
从MySQL 8.0.14开始,先前弃用的 innodb_undo_tablespaces 变量不再可配置。有关更多信息,请参见第15.6.3.4节“撤消表空间”。
-
ALTER TABLE … UPGRADE PARTITIONING 语句的支持已删除。
-
从MySQL 8.0.16开始,internal_tmp_disk_storage_engine 已经删除 。现在,磁盘上的内部临时表始终使用 InnoDB 存储引擎。
-
CMake 选项 DISABLE_SHARED 已经删除;
第三方评测
-
全新 Data Dictionary 设计
摒弃了 server 层定义的 frm 文件和其他非事务表,使用了一组 InnoDB 表来保持数据字典,支持事务特性; -
支持 Atomic DDL
在 Data Dictionary 支持事务特性的基础上,增加了 DDL Log 字典表,用以协调 DDL 过程中,对数据字典、
文件系统和事务系统的修改,做到原子性; -
Instant add column
InnoDB 解决了加字段需要 copy 的问题,可以 Inplace; -
并行查询
提供 innodb_parallel_read_threads ,索引子树并发 count; -
redo 优化
-
json 类型数据加强,增加 multi-valued indexes,方便 json 搜索
-
不可见索引,想删除索引,又怕影响性能,先不可见,观察后没问题删除
-
hash join
-
快速加新列
-
直方图
-
函数索引、表达式索引
-
逆序索引
-
hint 语法加强
-
支持在线修改完配置参数后, set persist 语法持久化
-
增强了窗口函数
MySQL 8.0
- 去除了 query_cache;
- sdb_open_table_share 由 HASH 换成了 unorder_multimap;
- sdb_create_handler 增加了 partitioned 变量;
handler
- delete_table
- open