MySQL 8.0中移除的功能(一)

发布时间:2024年01月15日

以下项目已经过时并在MySQL 8.0中被删除。如果有替代方案,请务必更新应用程序以使用这些替代方案。

对于在MySQL 8.0中被删除的功能,如果从MySQL 5.7源复制到MySQL 8.0副本时,可能会导致语句失败,或者在源和副本上产生不同的效果。为了避免这样的问题,使用在MySQL 8.0中被删除功能的应用程序应进行修订,以避免使用这些功能,并尽可能使用替代方案。

  • innodb_locks_unsafe_for_binlog系统变量已被移除。 READ COMMITTED隔离级别提供了类似的功能。
  • MySQL 8.0.0引入的information_schema_stats变量已被移除,并在MySQL 8.0.3中被information_schema_stats_expiry取代。
    information_schema_stats_expiry用于定义缓存的INFORMATION_SCHEMA表统计信息的过期设置。
  • 与已过时的InnoDB系统表相关的代码已在MySQL 8.0.3中移除。
    基于InnoDB系统表的INFORMATION_SCHEMA视图已被内部系统视图替代,这些视图基于数据字典表。受影响的InnoDB INFORMATION_SCHEMA视图已被重新命名:
    Old NameNew Name
    INNODB_SYS_COLUMNSINNODB_COLUMNS
    INNODB_SYS_DATAFILESINNODB_DATAFILES
    INNODB_SYS_FIELDSINNODB_FIELDS
    INNODB_SYS_FOREIGNINNODB_FOREIGN
    INNODB_SYS_FOREIGN_COLSINNODB_FOREIGN_COLS
    INNODB_SYS_INDEXESINNODB_INDEXES
    INNODB_SYS_TABLESINNODB_TABLES
    INNODB_SYS_TABLESPACESINNODB_TABLESPACES
    INNODB_SYS_TABLESTATSINNODB_TABLESTATS
    INNODB_SYS_VIRTUALINNODB_VIRTUAL

    在升级到MySQL 8.0.3或更高版本后,需要更新任何引用先前的InnoDB INFORMATION_SCHEMA视图名称的脚本。

  • 以下与账户管理相关的功能已被移除:

    • 使用 ?CREATE USER?代替 ?GRANT?来创建用户。遵循这种做法使 ?NO_AUTO_CREATE_USER? SQL模式对 ?GRANT?语句无效,因此该模式也已被移除。当在选项文件中的 ?sql_mode?选项中存在 ?NO_AUTO_CREATE_USER?值阻止 ?mysqld?启动时,现在会将错误写入服务器日志。

    • 使用 ?GRANT?语句来修改账户属性,包括身份验证、SSL和资源限制属性,已被移除。相反,在创建账户时,可以使用 ?CREATE USER?语句来设置这些属性,或者使用 ?ALTER USER?语句在创建后修改它们。

    • 在MySQL中,?IDENTIFIED BY PASSWORD 'auth_string'?语法用于 ?CREATE USER?和 ?GRANT?语句已被移除。相反,现在可以使用 ?IDENTIFIED WITH auth_plugin AS 'auth_string'?来替代,在 ?CREATE USER?和 ?ALTER USER?语句中使用此语法,其中的 ?'auth_string'?值采用与指定的插件兼容的格式。

      此外,由于 ?IDENTIFIED BY PASSWORD?语法已被移除,因此 ?log_builtin_as_identified_by_password?系统变量也不再需要,并已被移除。

    • PASSWORD()?函数已在MySQL中移除。这意味着您不能再使用 ?PASSWORD()?函数生成密码哈希值,也不能在 ?SET PASSWORD ... = PASSWORD('auth_string')?等语句中使用它。

    • ??old_passwords?是MySQL中的一个系统变量。?

  • 查询缓存已被移除。这个移除的行为包括以下内容:
    • ??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?和 ?SQL_NO_CACHE? SELECT 参数被废弃,并且其行为不再起作用。这些参数预计在未来的MySQL版本中被移除。
    • ??ndb_cache_check_time?系统变量被废弃,并预计在未来的MySQL版本中被移除。
    • ??have_query_cache?系统变量仍然被废弃,并且始终具有NO值,预计在未来的MySQL版本中被移除。
  • 数据字典提供有关数据库对象的信息,因此服务器不再通过检查数据目录中的目录名称来查找数据库。因此,?--ignore-db-dir?选项和 ?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?客户端选项已被移除。?mysql_options()? C API函数的 ?MYSQL_SECURE_AUTH?选项也已被移除。
  • `multi_range_count`系统变量已移除。
  • log_warnings?系统变量和 ?--log-warnings?服务器选项已被移除。请使用 ?log_error_verbosity?系统变量代替。
  • sql_log_bin?系统变量的全局作用域已被移除。?sql_log_bin?只具有会话级别的作用域,依赖于访问 ?@@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选项的允许值使用。

    MAXDB的移除意味着在CREATE TABLE或ALTER TABLE语句中,TIMESTAMP数据类型将被视为TIMESTAMP,而不再被视为DATETIME。

  • 已移除GROUP BY子句中的弃用ASC或DESC限定符。以前依赖于GROUP BY排序的查询可能会产生与之前的MySQL版本不同的结果。为了按照给定的排序顺序进行查询,请提供ORDER BY子句。

  • `EXPLAIN`语句的`EXTENDED`和`PARTITIONS`关键字已被移除。这些关键字是不必要的,因为它们的效果总是启用的。

  • 被移除的加密相关功能如下:
    ? `ENCODE()`和`DECODE()`函数。
    ? `ENCRYPT()`函数。
    ? `DES_ENCRYPT()`和`DES_DECRYPT()`函数,`--des-key-file`选项,`have_crypt`系统变量,`FLUSH`语句的`DES_KEY_FILE`选项以及`HAVE_CRYPT`CMake选项。
    替代被移除的加密函数:对于`ENCRYPT()`函数,考虑改用`SHA2()`进行单向哈希;对于其他情况,考虑改用`AES_ENCRYPT()`和`AES_DECRYPT()`函数。

  • 在MySQL 5.7中,为了使空间函数的命名空间更加一致,几个具有多个名称的空间函数被标记为弃用。目标是,如果一个空间函数执行精确操作,则其函数名应以ST_开头;如果执行基于最小边界矩形的操作,则函数名应以MBR开头。在MySQL 8.0中,这些被弃用的函数被移除,只保留相应的ST_和MBR函数:

    • 这些函数已经被移除,并改用MBR名称代替:`Contains()`, `Disjoint()`, `Equals()`, `Intersects()`, `Overlaps()`, `Within()`。

    • 这些函数已被移除,并改用ST_名称替代: `Area()`, `AsBinary()`, `AsText()`, `AsWKB()`, `AsWKT()`, `Buffer()`, `Centroid()`, `ConvexHull()`, `Crosses()`, `Dimension()`, `Distance()`, `EndPoint()`, `Envelope()`, `ExteriorRing()`, `GeomCollFromText()`, `GeomCollFromWKB()`, `GeomFromText()`, `GeomFromWKB()`, `GeometryCollectionFromText()`, `GeometryCollectionFromWKB()`, `GeometryFromText()`, `GeometryFromWKB()`, `GeometryN()`, `GeometryType()`, `InteriorRingN()`, `IsClosed()`, `IsEmpty()`, `IsSimple()`, `LineFromText()`, `LineFromWKB()`, `LineStringFromText()`, `LineStringFromWKB()`, `MLineFromText()`, `MLineFromWKB()`, `MPointFromText()`, `MPointFromWKB()`, `MPolyFromText()`, `MPolyFromWKB()`, `MultiLineStringFromText()`, `MultiLineStringFromWKB()`, `MultiPointFromText()`, `MultiPointFromWKB()`, `MultiPolygonFromText()`, `MultiPolygonFromWKB()`, `NumGeometries()`, `NumInteriorRings()`, `NumPoints()`, `PointFromText()`, `PointFromWKB()`, `PointN()`, `PolyFromText()`, `PolyFromWKB()`, `PolygonFromText()`, `PolygonFromWKB()`, `SRID()`, `StartPoint()`, `Touches()`, `X()`, `Y()`。

    • GLength()? 函数已被移除,并改用 ?ST_Length()? 函数来代替。

  • 几何参数不再被允许,并会产生错误。请参考该部分的指南,以迁移查询并停止使用几何参数。
  • 解析器不再将 ?\N? 视为 SQL 语句中 ?NULL? 的同义词。请使用 ?NULL? 代替。该更改不影响使用 ?LOAD DATA? 或 ?SELECT ... INTO OUTFILE? 进行的文本文件导入或导出操作,对于这些操作,仍然使用 ?\N? 表示 ?NULL?。
文章来源:https://blog.csdn.net/hay23455/article/details/135596060
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。