MySQL 8.0中删除的功能
以下各项已过时,并且已在MySQL 8.0中删除。在显示替代方案的地方,应更新应用程序以使用它们。
对于使用MySQL 8.0中已删除功能的MySQL 5.7应用程序,将语句从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取代。
- 与过时的InnoDB系统表相关的代码已在MySQL 8.0.3中删除。基于InnoDB系统表的INFORMATION_SCHEMA视图已替换为数据字典表上的内部系统视图。受影响的InnoDB INFORMATION_SCHEMA视图已重命名:
old name | new name |
---|---|
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 |
升级到MySQL 8.0.3或更高版本后,更新引用先前InnoDB INFORMATION_SCHEMA视图名称的所有脚本。
与帐户管理相关的以下功能已删除:
使用GRANT创建用户。而是使用CREATE USER。遵循这种做法会使NO_AUTO_CREATE_USER SQL模式对于GRANT语句不重要,因此也将其删除,并且当选项文件中存在sql_mode选项的该值阻止mysqld启动时,现在会将错误写入服务器日志。使用GRANT修改除特权分配以外的帐户属性。这包括身份验证,SSL和资源限制属性。相反,请在创建帐户时使用CREATE USER建立此类属性,或之后使用ALTER USER对其进行修改。
CREATE USER和GRANT的IDENTIFIED BY PASSWORD 'auth_string'语法,将会被IDENTIFIED WITH auth_plugin AS 'auth_string'替代,其中'auth_string'值的格式与命名插件兼容。
此外,由于删除了IDENTIFIED BY PASSWORD,所以log_builtin_as_identified_by_password系统变量是多余的,已被删除。此外,PASSWORD()的删除意味着SET PASSWORD ... = PASSWORD('auth_string')语法不再可用。
old_passwords系统变量。
-
查询缓存已删除。删除包括以下项目:
- 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
数据字典提供有关数据库对象的信息,因此服务器不再检查数据目录中的目录名称以查找数据库。因此,--ignore-db-dir选项和ignore_db_dirs系统变量是多余的并已删除。
tx_isolation和tx_read_only系统变量已被删除。请改用transaction_isolation和transaction_read_only
由于.frm文件已过时,因此已删除sync_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()函数
-
在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()
解析器不会把\n作为null的代名词,而是使用null来代替。
客户端的--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系统变量
服务器不再通过添加#mysql50#前缀将包含特殊字符的MySQL 5.1之前的数据库名称转换为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_install_db程序已从MySQL发行版中删除。数据目录初始化应通过使用--initialize或--initialize-insecure选项调用mysqld来执行。另外,删除了mysql_install_db使用的mysqld的--bootstrap选项,并删除了控制mysql_install_db的安装位置的INSTALL_SCRIPTDIR CMake选项。
-
通用分区处理程序已从MySQL服务器中删除。为了支持给定表的分区,用于该表的存储引擎现在必须提供其自己的(“本机”)分区处理程序。--partition和--skip-partition选项已从MySQL服务器中删除,并且与分区相关的条目不再显示在SHOW PLUGINS的输出中或INFORMATION_SCHEMA.PLUGINS表中。
当前有两个MySQL存储引擎提供本机分区支持:InnoDB和NDB。其中,MySQL 8.0仅支持InnoDB。使用任何其他存储引擎在MySQL 8.0中创建分区表的任何尝试都会失败。
不支持非innodb引擎之外的表从mysql5.7升级到8.0,处理此类表有两种选择:- 使用ALTER TABLE ... REMOVE PARTITIONING删除表的分区。
- 使用ALTER TABLE ... ENGINE = INNODB将用于表的存储引擎更改为InnoDB。
在将服务器升级到MySQL 8.0之前,必须对每个分区的非InnoDB表至少执行上述两个操作之一。否则,升级后将无法使用该表。
- 系统和状态变量信息不再保存在INFORMATION_SCHEMA中。这些表被删除:GLOBAL_VARIABLES,SESSION_VARIABLES,GLOBAL_STATUS,SESSION_STATUS。改用相应的Performance Schema表。此外,删除了show_compatibility_56系统变量。它用于过渡期间,在此期间,INFORMATION_SCHEMA表中的系统和状态变量信息已移至“性能模式”表,并且不再需要。删除了以下状态变量:Slave_heartbeat_period,Slave_last_heartbeat,Slave_received_heartbeats,Slave_retried_transactions,Slave_running。Performance Schema表中提供了它们提供的信息。
- Performance Schema中setup_timers表已删除,Performance_timers表中的TICK行也已删除。
- mysql_plugin实用程序已删除。替代方法包括在服务器启动时使用--plugin-load或--plugin-load-add选项加载插件,或者在运行时使用INSTALL PLUGIN语句加载插件。
- resolveip实用程序已删除。可以改用nslookup,host或dig。
- 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
- 弃用的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模式视图包含单独的模式名称和表名称列
- InnoDB不再支持压缩的临时表。启用innodb_strict_mode时(默认设置),如果指定了ROW_FORMAT = COMPRESSED或KEY_BLOCK_SIZE,则CREATE TEMPORARY TABLE返回错误。如果禁用了innodb_strict_mode,则会发出警告,并使用非压缩的行格式创建临时表
- 在MySQL数据目录之外创建表空间数据文件时,InnoDB不再创建.isl文件(InnoDB符号链接文件)。现在,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的产品生命周期已经结束,不再需要这些选项。
FILE_FORMAT列已从INNODB TABLES和INNODB TABLESPACES Information_schema表中删除。
- 删除了innodb_support_xa系统变量,该变量支持XA事务中的两阶段提交。始终启用对XA事务中的两阶段提交的InnoDB支持。
- 对DTrace的支持已删除。
- JSON_APPEND()函数已删除。请改用JSON_ARRAY_APPEND()。
- 在MySQL 8.0.13中删除了对将表分区放置在共享InnoDB表空间中的支持。共享表空间包括InnoDB系统表空间和常规表空间。有关标识共享表空间中的分区并将其移至每个表文件表空间的信息
- 在MySQL 8.0.13中不支持在SET以外的语句中设置用户变量。此功能可能会在MySQL 9.0中删除。
- 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存储引擎