MySQL 8.0中移除的功能(二)

发布时间:2024年01月15日
  • 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? 选项仍然可用,但从 MySQL 8.0.26 版本开始已被弃用,并将在未来的 MySQL 版本中删除。)
  • 对于 C API,?mysql_options()? 的 ?MYSQL_OPT_SSL_ENFORCE? 和 ?MYSQL_OPT_SSL_VERIFY_SERVER_CERT? 选项对应于客户端的 ?--ssl? 和 ?--ssl-verify-server-cert? 选项,并已被移除。请改用带有选项值 ?SSL_MODE_REQUIRED? 或 ?SSL_MODE_VERIFY_IDENTITY? 的 ?MYSQL_OPT_SSL_MODE?。
  • --temp-pool? 服务器选项已被移除。
  • ignore_builtin_innodb? 系统变量已被移除。
  • ?服务器不再对包含特殊字符的早于 MySQL 5.1 的数据库名称执行转换,以在其前面添加 ?#mysql50#? 前缀来符合 5.1 格式。由于不再执行这些转换,因此移除了 mysqlcheck 的 ?--fix-db-names? 和 ?--fix-table-names? 选项,ALTER DATABASE 语句的 ?UPGRADE DATA DIRECTORY NAME? 子句以及 Com_alter_db_upgrade 状态变量。

    升级仅支持从一个主要版本到另一个(例如,从 5.0 到 5.1,或从 5.1 到 5.5),因此几乎没有剩余的需要将旧的5.0数据库名称转换为当前MySQL版本。作为解决方法,请先将 MySQL 5.0 安装升级到 MySQL 5.1,然后再升级到更高版本的发布版。

  • MySQL发行版中移除了mysql_install_db程序。现在应该通过使用 ?mysqld?并添加 ?--initialize?或 ?--initialize-insecure?选项来进行数据目录初始化。此外,?mysqld?的 ?--bootstrap?选项(先前由mysql_install_db使用)也已被移除,以及控制mysql_install_db安装位置的INSTALL_SCRIPTDIR CMake选项也已被删除。

  • MySQL服务器中移除了通用分区处理程序(generic partitioning handler)。为了支持给定表的分区,现在用于该表的存储引擎必须提供自己的(“本地”)分区处理程序。MySQL 服务器中的 ?--partition? 和 ?--skip-partition? 选项被移除,并且分区相关的条目不再显示在 ?SHOW PLUGINS? 的输出或信息模式下的 PLUGINS 表中。

    目前,两个 MySQL 存储引擎提供本地分区支持:InnoDB 和 NDB。其中,仅在 MySQL 8.0 中支持 InnoDB。在 MySQL 8.0 中使用其他存储引擎尝试创建分区表将会失败。

  • 当升级MySQL服务器从MySQL 5.7(或更早版本)到MySQL 8.0时,不支持直接升级使用除InnoDB之外的存储引擎(如MyISAM)的分区表。有两种处理这种情况的选项:

    - 使用 ALTER TABLE ... REMOVE PARTITIONING 命令删除表的分区。
    - 使用 ALTER TABLE ... ENGINE=INNODB 命令将表使用的存储引擎改为InnoDB。

    在升级服务器到MySQL 8.0之前,必须对每个分区非InnoDB表执行上面列出的两个操作中的至少一个。否则,在升级后无法使用这样的表。

    由于创建语句会导致使用不支持分区的存储引擎进行分区表的现在会因为错误(ER_CHECK_NOT_IMPLEMENTED)而失败,因此您必须确保导入到MySQL 8.0服务器的任何旧版本MySQL生成的转储文件(例如mysqldump)中的语句不要指定像MyISAM这样没有本地分区处理程序的存储引擎。可以通过执行以下任一操作来实现:

    - 从使用了STORAGE ENGINE选项值为InnoDB以外值的CREATE TABLE语句中移除任何与分区相关的引用。
    - 将存储引擎指定为InnoDB,或者允许默认情况下使用InnoDB作为表的存储引擎。

  • 在MySQL 8.0中,不再在INFORMATION_SCHEMA中维护系统和状态变量信息。以下表已被删除:GLOBAL_VARIABLES、SESSION_VARIABLES、GLOBAL_STATUS和SESSION_STATUS。请改为使用相应的Performance Schema表。另外,show_compatibility_56系统变量也已被移除。它在将系统和状态变量信息从INFORMATION_SCHEMA表迁移到Performance Schema表的过渡期间使用,现在不再需要。以下状态变量已被移除:Slave_heartbeat_period、Slave_last_heartbeat、Slave_received_heartbeats、Slave_retried_transactions和Slave_running。它们提供的信息可以在Performance Schema表中找到。

  • 在MySQL 8.0中,已经移除了Performance Schema的setup_timers表和performance_timers表中的TICK行。

  • 在MySQL 8.0中,已经移除了libmysqld嵌入式服务器库,以及以下内容:
    ? mysql_options()中的MYSQL_OPT_GUESS_CONNECTION、MYSQL_OPT_USE_EMBEDDED_CONNECTION、MYSQL_OPT_USE_REMOTE_CONNECTION和MYSQL_SET_CLIENT_IP选项。
    ? mysql_config中的 --libmysqld-libs、--embedded-libs 和 --embedded 选项。
    ? CMake中的WITH_EMBEDDED_SERVER、WITH_EMBEDDED_SHARED_LIBRARY和INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR选项。
    ? mysql命令中的(未记录的)--server-arg选项。
    ? mysqltest命令中的 --embedded-server、--server-arg 和 --server-file选项。
    ? mysqltest_embedded和mysql_client_test_embedded测试程序。

  • 在MySQL 8.0中,已经移除了mysql_plugin实用程序。替代方法包括在服务器启动时使用--plugin-load或--plugin-load-add选项加载插件,或在运行时使用INSTALL PLUGIN语句加载插件。

  • 在MySQL 8.0中,已经移除了resolveip实用程序。可以使用nslookup、host或dig等工具进行替代。

  • 在MySQL 8.0中,已经移除了resolve_stack_dump实用程序。来自官方MySQL构建的堆栈跟踪总是有符号化的,所以不需要使用resolve_stack_dump了。

  • 以下服务器错误代码已被删除,并不再使用。测试特定的这些错误的应用程序应该进行更新。
ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE
ER_BINLOG_ROW_RBR_TO_SBR
ER_BINLOG_ROW_WRONG_TABLE_DEF
ER_CANT_ACTIVATE_LOG
ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION
ER_CANT_CREATE_FEDERATED_TABLE
ER_CANT_CREATE_SROUTINE
ER_CANT_DELETE_FILE
ER_CANT_GET_WD
ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF
ER_CANT_SET_WD
ER_CANT_WRITE_LOCK_LOG_TABLE
ER_CREATE_DB_WITH_READ_LOCK
ER_CYCLIC_REFERENCE
ER_DB_DROP_DELETE
ER_DELAYED_NOT_SUPPORTED
ER_DIFF_GROUPS_PROC
ER_DISK_FULL
ER_DROP_DB_WITH_READ_LOCK
ER_DROP_USER
ER_DUMP_NOT_IMPLEMENTED
ER_ERROR_DURING_CHECKPOINT
ER_ERROR_ON_CLOSE
ER_EVENTS_DB_ERROR
ER_EVENT_CANNOT_DELETE
ER_EVENT_CANT_ALTER
ER_EVENT_COMPILE_ERROR
ER_EVENT_DATA_TOO_LONG
ER_EVENT_DROP_FAILED
ER_EVENT_MODIFY_QUEUE_ERROR
ER_EVENT_NEITHER_M_EXPR_NOR_M_AT
ER_EVENT_OPEN_TABLE_FAILED
ER_EVENT_STORE_FAILED
ER_EXEC_STMT_WITH_OPEN_CURSOR
ER_FAILED_ROUTINE_BREAK_BINLOG
ER_FLUSH_MASTER_BINLOG_CLOSED
ER_FORM_NOT_FOUND
ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSED
ER_FRM_UNKNOWN_TYPE
ER_GOT_SIGNAL
ER_GRANT_PLUGIN_USER_EXISTS
ER_GTID_MODE_REQUIRES_BINLOG
ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST
ER_HASHCHK
ER_INDEX_REBUILD
ER_INNODB_NO_FT_USES_PARSER
ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR
ER_LOAD_DATA_INVALID_COLUMN_UNUSED
ER_LOGGING_PROHIBIT_CHANGING_OF
ER_MALFORMED_DEFINER
ER_MASTER_KEY_ROTATION_ERROR_BY_SE
ER_NDB_CANT_SWITCH_BINLOG_FORMAT
ER_NEVER_USED
ER_NISAMCHK
ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR
ER_NO_FILE_MAPPING
ER_NO_GROUP_FOR_PROC
ER_NO_RAID_COMPILED
ER_NO_SUCH_KEY_VALUE
ER_NO_SUCH_PARTITION__UNUSED
ER_OBSOLETE_CANNOT_LOAD_FROM_TABLE
ER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED
ER_ORDER_WITH_PROC
ER_PARTITION_SUBPARTITION_ERROR
ER_PARTITION_SUBPART_MIX_ERROR
ER_PART_STATE_ERROR
ER_PASSWD_LENGTH
ER_QUERY_ON_MASTER
ER_RBR_NOT_AVAILABLE
ER_SKIPPING_LOGGED_TRANSACTION
ER_SLAVE_CHANNEL_DELETE
ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT
ER_SLAVE_MUST_STOP
ER_SLAVE_WAS_NOT_RUNNING
ER_SLAVE_WAS_RUNNING
ER_SP_GOTO_IN_HNDLR
ER_SP_PROC_TABLE_CORRUPT
ER_SQL_MODE_NO_EFFECT
ER_SR_INVALID_CREATION_CTX
ER_TABLE_NEEDS_UPG_PART
ER_TOO_MUCH_AUTO_TIMESTAMP_COLS
ER_UNEXPECTED_EOF
ER_UNION_TABLES_IN_DIFFERENT_DIR
ER_UNSUPPORTED_BY_REPLICATION_THREAD
ER_UNUSED1
ER_UNUSED2
ER_UNUSED3
ER_UNUSED4
ER_UNUSED5
ER_UNUSED6
ER_VIEW_SELECT_DERIVED_UNUSED
ER_WRONG_MAGIC
ER_WSAS_FAILED
  • 在MySQL 8.0中,已经移除了不推荐使用的INFORMATION_SCHEMA中的INNODB_LOCKS和INNODB_LOCK_WAITS表。请改用Performance Schema中的data_locks和data_lock_waits表来替代。值得注意的是,在MySQL 5.7中,INNODB_LOCKS表中的LOCK_TABLE列和sys模式的innodb_lock_waits和x$innodb_lock_waits视图中的locked_table列包含了组合的模式/表名值。但在MySQL 8.0中,data_locks表和sys模式的视图中含有分离的模式名称和表名称的列。
  • 在MySQL 8.0中,InnoDB不再支持压缩临时表。当启用innodb_strict_mode(默认情况下)时,如果指定了ROW_FORMAT=COMPRESSED或KEY_BLOCK_SIZE,则CREATE TEMPORARY TABLE会返回错误。如果禁用innodb_strict_mode,则会发出警告,并使用非压缩的行格式创建临时表。
  • 在MySQL 8.0中,当在MySQL数据目录以外创建表空间数据文件时,InnoDB不再创建.ISL(InnoDB Symbolic Link)文件。现在,innodb_directories选项支持将表空间文件定位为在数据目录之外创建的文件。

    由于这个变化,在服务器离线状态下通过手动修改.ISL文件来移动远程表空间不再被支持。现在,通过innodb_directories选项支持移动远程表空间文件。

  • 以下InnoDB文件格式变量已被移除:
    ? innodb_file_format
    ? innodb_file_format_check
    ? innodb_file_format_max
    ? innodb_large_prefix
    文件格式变量在MySQL 5.1中是为了创建与早期版本的InnoDB兼容的表而必要的。现在,MySQL 5.1已经达到了其产品生命周期的终点,这些选项不再需要。

    INNODB_TABLES和INNODB_TABLESPACES信息模式表中的FILE_FORMAT列也已被移除。

  • 已经移除了innodb_support_xa系统变量,该变量用于在XA事务中启用两阶段提交的支持。InnoDB对于XA事务的两阶段提交支持始终是启用的。

  • DTrace支持已在MySQL 8.0中被移除。

  • JSON_APPEND()函数已被移除。请改用JSON_ARRAY_APPEND()函数。

  • 从MySQL 8.0.13版本开始,不再支持将表分区放置在共享的InnoDB表空间中。共享表空间包括InnoDB系统表空间和通用表空间。

  • 从MySQL 8.0.13版本开始,除了SET语句之外,在其他语句中设置用户变量的功能已被弃用。这个功能可能在MySQL 9.0中被移除。请注意在将来的MySQL版本中更新您的应用程序以避免使用这个被弃用的功能。

  • --ndb perror选项已被移除。请改用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变量不再可配置。

  • ALTER TABLE ... UPGRADE PARTITIONING语句的支持已被移除。

  • 从MySQL 8.0.16开始,已移除对internal_tmp_disk_storage_engine系统变量的支持;现在,在磁盘上的内部临时表总是使用InnoDB存储引擎。

  • DISABLE_SHARED CMake选项是未使用的,已被移除。

  • 从MySQL 8.0.30开始,myisam_repair_threads系统变量已被移除。

文章来源:https://blog.csdn.net/hay23455/article/details/135604053
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。