MySQL 8.0 新增功能

  • Post author:
  • Post category:mysql




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



版权声明:本文为u010502974原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。