You need to enable JavaScript to run this app.
文档中心
云数据库 MySQL 版

云数据库 MySQL 版

复制全文
下载 pdf
升级版本
升级实例数据库大版本预检查项
复制全文
下载 pdf
升级实例数据库大版本预检查项
本文介绍了升级实例数据库大版本的预检查项目。​
​
检查项​
描述​
级别​
问题、影响及修复方法​
defaultCollationForUTF8MB4Check​
检查默认排序规则:升级后参数 default_collation_for_utf8mb4 默认修改为 utf8mb4_general_ci,评估其在 MySQL 8.0 中的执行安全性。​
Warning​
  • 问题:升级后 default_collation_for_utf8mb4 参数设置为 utf8mb4_general_ci​
  • 影响:SQL 执行后返回结果的排序可能与升级前有差异。​
fullTextIndexCheck​
检查全局索引中是否存在 FTS_0 前缀。​
Error​
问题:当前实例中存在以FTS_0 为前缀的索引​
影响:内部依赖前缀,会导致升级任务异常​
修复:查询操作以 fts_0 or FTS_0,删除或者修改全局索引。​
SELECT * FROM information_schema.tables WHERE table_name LIKE 'fts_0%';​
expiredEventCheck​
检查当前实例事件与触发器状态。​
Error​
  • 问题:当前实例存在未被清理的过期事件(EVENTS)。​
  • 影响:若目标实例event_scheduler打开,会触发过期事件自动清理,导致主从不一致。​
  • 修复:查看相关事件 select * from information_schema.events where EXECUTE_AT <= NOW() AND ON_COMPLETION='NOT PRESERVE' AND EVENT_TYPE ='ONE TIME';​
  • 清理掉无效事件。如 DROP EVENT IF EXISTS NAME;​
initConnectCheck​
检查 init_connect 参数:检测是否配置了连接初始化 SQL 语句,评估其在 MySQL 8.0 中的执行安全性。​
Error/Warning​
  • Warning​
  • 问题:升级后默认字符序变更为 utf8mb4_0900_ai_ci,参数自动增加 set @@collation_connection = IF(@@collation_connection = 'utf8mb4_0900_ai_ci', 'utf8mb4_general_ci', @@collation_connection) 设置。​
  • 影响:SQL 执行后返回结果的排序可能与升级前有差异。​
  • Error​
  • 问题:升级后默认字符序变更为 utf8mb4_0900_ai_ci,参数自动增加 set @@collation_connection = IF(@@collation_connection = 'utf8mb4_0900_ai_ci', 'utf8mb4_general_ci', @@collation_connection) 设置。​
  • 影响:SQL 执行后返回结果的排序可能与升级前有差异。​
  • 修复:删除参数中 set names utf8mb4 配置。​
instanceDBEngineCheck​
检查非 InnoDB 引擎的业务表:识别 MyISAM、MEMORY 等非 InnoDB 引擎的业务表,需转换引擎或评估兼容性。​
Error​
  • 问题:实例数据库中有非 InnoDB 引擎的业务表,限制升级​
  • 影响:以下表不满足 %s 条件​
  • 修复:​
  • 查询当前表和库。​
  • ​
    SELECT table_name, table_schema FROM information_schema.TABLES WHERE NOT (ENGINE = 'innodb') AND table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'byte_rds_meta');​
    ​
  • 修改存储引擎。​
  • ​
    ALTER TABLE your_database.your_table ENGINE = InnoDB;​
    ​
instanceHealthCheck​
检查实例健康情况:获取实例运行情况,确认是否符合升级要求。​
Error​
  • 问题:基本信息检查未通过。​
  • 影响:不支持升级。​
  • 修复:​
  • 实例负载过高,需要扩容。​
  • 实例节点连通性可能异常,稍后重试。​
  • 检查实例的全局只读功能是否为开启。如开启,则关闭后重试。​
instanceSlaveStateCheck​
检查备节点状态:检测主从复制中的备节点是否同步正常,避免升级导致数据不一致。​
Error​
  • 检查备节点状态不正常;​
  • 检查备节点延迟时间不在阈值内;​
instanceStatusCheck​
检查实例状态:验证 MySQL 实例的运行状态(如服务是否正常启动、连接性是否稳定)。​
Error​
  • 问题:实例状态不满足要求,不支持升级。​
InstanceSyncDelayCheck​
检查实例延迟情况。​
Warning​
问题:主从同步延迟不满足条件。​
影响:升级周期变长。​
instanceTDEOrSSLCheck​
检查实例 TDE 和 SSL 使用情况。​
Error​
问题:实例开启 TDE/SSL 能力,不支持升级。​
mysqlShellCheck​
检查 MySQL Shell 工具:验证 MySQL 8.0 命令行工具(MySQL Shell)的安装及兼容性,确保可执行升级操作。​
Error​
  • 问题:Mysql shell 工具执行异常。​
  • 影响:依赖工具异常,无法继续升级,请提交工单联系技术支持处理。​
removedSysVars​
检查系统参数变更:验证参数是否被废弃(如 query_cache_size)。​
Warning​
  • 问题:使用了在 MySQL 8.0 中废弃的参数。​
  • 影响:升级后相关参数将被忽略。​
sequenceEngineCheck​
检查自研功能使用:识别是否使用 MySQL 5.7 自研的 SEQUENCE 能力(该能力在升级后无法兼容)。​
Error​
  • 问题:当前实例已使用MySQL 5.7自研的SEQUENCE 功能。​
  • 影响:升级后无法兼容SEQUENCE能力,可能导致业务异常。​
statementOutlineChecker​
将 Statement Outline 升级至 MySQL 8.0 兼容的 SQL 指纹格式。​
Warning​
  • 问题:SQL 查询在 MySQL 5.7 与 MySQL 8.0 版本上的 SQL 指纹有区别,需要升级至 MySQL 8.0 兼容版本。​
  • 影响:Outline 升级前,用户在 MySQL 8.0 上的查询计划可能与 MySQL 5.7 不一致,升级期间 Outline 功能会受到影响。​
sysVarsNewDefaults​
检查新默认值的系统参数:检测是否显式覆盖了 MySQL 8.0 中默认值变更的变量(如 innodb_flush_neighbors 默认从 1 改为 0)。​
Notice​
  • 问题:以下未在您的配置文件中定义的系统参数将具有新的默认值。如果您依赖它们当前的值,请在执行升级之前对它们进行审核并定义。​
  • 影响:升级后相关参数将被变更。​
databaseNumberCheck​
限制本地盘实例库数量:为防止元数据管理性能问题,单实例库总数超过阈值。​
Error​
问题:本地盘实例的数据库数量超过限制,限制升级。​
  • CPU 核数为 4 核或更少,数据库数量限制为 1000。​
  • CPU 核数为 4 核以上、8 核以下时,数据库数量限制为 10000。​
  • 其他 CPU 核数的规格下, 数据库数量限制为 100000。​
tableDiscardCheck​
检查 Discarded 表:检测通过 ALTER TABLE ... DISCARD TABLESPACE 操作丢弃的表,需修复或重新导入数据文件。​
Error​
  • 问题:检查实例中存在discarded的表(即做过ALTER TABLE discard TABLESPACE 操作),限制升级​
  • 影响:以下表不满足 %s 条件​
  • 修复:​
  • 查询操作​
  • ​
    SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FS_BLOCK_SIZE=0 AND FILE_SIZE=0 AND name NOT LIKE '%#sql%';​
    ​
  • 当前表不支持升级。​
tableNumberCheck​
限制本地盘实例表数量:为防止元数据管理性能问题,单实例表总数超过阈值。​
Error​
问题:本地盘实例的数据库表数量超过限值,限制升级。​
  • CPU 核数为 4 核或更少,库表数量限制为 1000。​
  • CPU 核数为 4 核以上、8 核以下时,库表数量限制为 10000。​
  • 其他 CPU 核数的规格下, 库表数量限制为 100000。​
tableSpatialIndexType​
检查 Spatial 字段的 BTREE 索引:发现地理空间类型(如 GEOMETRY)字段错误使用 BTREE 索引,需改为 SPATIAL 索引。​
Error​
  • 影响:以下表使用过 %s BTREE索引​
  • 修复:​
  • 执行 sql 查询当前表和库。​
  • ​
    SELECT​
    s.TABLE_SCHEMA,​
    s.TABLE_NAME,​
    s.INDEX_NAME,​
    s.COLUMN_NAME​
    FROM​
    INFORMATION_SCHEMA.STATISTICS s​
    JOIN​
    INFORMATION_SCHEMA.COLUMNS c​
    ON​
    s.TABLE_SCHEMA = c.TABLE_SCHEMA​
    AND s.TABLE_NAME = c.TABLE_NAME​
    AND s.COLUMN_NAME = c.COLUMN_NAME​
    WHERE​
    c.DATA_TYPE IN ('GEOMETRY', 'POINT', 'LINESTRING', 'POLYGON', 'MULTIPOINT', 'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION')​
    AND s.INDEX_TYPE = 'BTREE';​
    ​
  • 修改索引类型。​
  1. 删除对应索引。​
  • ​
    DROP INDEX index_name ON table_name;​
    ​
  1. 添加新的索引。​
  • ​
    -- 创建唯一索引​
    ALTER TABLE table_name ADD UNIQUE INDEX index_name (column1, column2, ...);​
    ​
oldTemporal​
检查已弃用的时间类型:检测是否使用了 MySQL 8.0 中已废弃的时间类型(如 TIME、DATETIME 的旧格式),这些类型可能导致兼容性问题。​
Error​
  • 问题:检测到使用旧版时间类型(如 TIME 或 DATETIME 的过时格式)。​
  • 影响:直接升级可能导致数据截断或查询错误。​
  • 修复:通过 ALTER TABLE <表名> FORCE 重建表。​
  • 示例:ALTER TABLE orders FORCE;​
routineSyntax​
检查存储过程类对象的语法兼容性:验证存储过程、函数或触发器的语法是否符合 MySQL 8.0 的新规范(例如 DEFINER 语法或变量作用域变更)。​
Error​
  • 问题:存储过程引用了 MySQL 8.0 保留关键字(如 RANK)。​
  • 影响:升级后存储过程执行失败。​
  • 修复:用反引号包裹关键字或重命名对象。​
  • 示例:SELECT `\rank` FROM scores;​
reservedKeywords​
检查数据库对象名是否与保留关键字冲突:识别表名、列名等是否使用了 MySQL 8.0 新增的保留关键字(如 CUME_DIST、JSON_TABLE),需重命名以避免语法错误。​
Error​
  • 问题:对象名与 MySQL 8.0 保留字冲突(如 GROUPS)。​
  • 影响:语法解析错误。​
  • 修复:重命名对象或在查询中使用反引号。​
  • 示例:RENAME TABLE groups TO user_groups;​
utf8mb3​
检查 utf8mb3 字符集的使用:检测是否仍在使用 3 字节的 utf8mb3 字符集,建议替换为 utf8mb4 以支持完整的 Unicode 字符(如表情符号)。​
Warning​
  • 问题:使用utf8mb3字符集。​
  • 影响:无法存储 4 字节 Unicode 字符。​
  • 修复:转换为utf8mb4:ALTER TABLE t CONVERT TO CHARSET utf8mb4;​
mysqlSchema​
检查 MySQL 系统库中的表名冲突:确保用户创建的数据库对象名称不与 MySQL 8.0 新增的系统表(如 innodb_index_stats)重名。​
Error​
  • 问题:用户表与 MySQL 8.0 系统表同名(如 innodb_index_stats)。​
  • 影响:升级时元数据冲突。​
  • 修复:重命名用户表:RENAME TABLE innodb_index_stats TO my_stats;​
nonNativePartitioning​
检查使用非原生分区引擎的分区表:检测分区表是否依赖非 InnoDB 引擎(如 MyISAM),MySQL 8.0 仅支持 InnoDB 作为分区表的默认引擎。​
Error​
  • 问题:分区表使用非 InnoDB 引擎(如 MyISAM)。​
  • 影响:升级后表不可访问。​
  • 修复:转换引擎:ALTER TABLE t ENGINE=InnoDB;​
foreignKeyLength​
检查外键约束名称是否超过 64 字符:外键名称长度在 MySQL 8.0 中限制为 64 字符,超长的名称需修改以避免元数据错误。​
Error​
  • 问题:外键名超过 64 字符。​
  • 影响:元数据损坏。​
  • 修复:重命名外键:ALTER TABLE t DROP FOREIGN KEY fk_long_name, ADD FOREIGN KEY (col) REFERENCES t2(col) CONSTRAINT fk_short;​
maxdbSqlModeFlags​
检查已废弃的 MAXDB SQL_MODE 模式:检测是否启用了 MAXDB 兼容模式,该模式在 8.0 中已移除,需调整相关 SQL 逻辑。​
Warning​
  • 问题:启用 MAXDB 模式。​
  • 影响:DATETIME 与 TIMESTAMP 类型转换异常。​
  • 修复:移除 MAXDB 模式:SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'MAXDB',''));​
obsoleteSqlModeFlags​
检查已废弃的 SQL_MODE 模式:识别使用了 MySQL 8.0 中已删除的 SQL 模式(如 NO_FIELD_OPTIONS),需更新配置以避免意外行为。​
Warning​
  • 问题:使用已废弃的 sql_mode 选项(如 NO_FIELD_OPTIONS)。​
  • 影响:升级后 SQL 行为异常。​
  • 修复:清理 sql_mode 配置。​
enumSetElementLength​
检查 ENUM/SET 列元素长度是否超限:确保 ENUM 或 SET 类型的元素值不超过 255 字符,否则会导致数据截断或创建失败。​
Error​
  • 问题:ENUM/SET 元素超长。​
  • 影响:插入时数据截断。​
  • 修复:缩短元素或改用 VARCHAR:ALTER TABLE t MODIFY c VARCHAR(500);​
partitionedTablesInSharedTablespaces​
检查共享表空间中的分区表:检测分区表是否存储在共享表空间(如 ibdata1),MySQL 8.0 要求分区表使用独立表空间。​
Error​
  • 问题:分区表使用共享表空间。​
  • 影响:升级失败。​
  • 修复:迁移到独立表空间:ALTER TABLE t REORGANIZE PARTITION p1 INTO (PARTITION p1 VALUES LESS THAN (100) TABLESPACE=innodb_file_per_table);​
circularDirectory​
检查表空间路径中的循环目录引用:验证表空间文件路径是否包含循环符号(如 .. 或 .),可能导致文件访问错误。​
Error​
  • 问题:表空间路径含循环引用(如/../)。​
  • 影响:MySQL 8.0.17 + 禁止此路径。​
  • 修复:修改路径为绝对路径。​
removedFunctions​
检查已移除的函数:识别使用了 MySQL 8.0 中已删除的函数(如 ENCRYPT () 或 IS_OLD_PASSWORD ()),需替换为等效的新函数。​
Error​
  • 问题:使用已移除函数(如 ENCRYPT())。​
  • 影响:SQL 执行失败。​
  • 修复:替换为等效函数(如 AES_ENCRYPT())。​
groupbyAscSyntax​
检查 GROUP BY 子句的 ASC/DESC 语法:检测是否依赖 GROUP BY col ASC/DESC 的隐式排序行为,需改为显式 ORDER BY。​
Error​
  • 问题:使用 GROUP BY col ASC/DESC。​
  • 影响:语法错误。​
  • 修复:改用 ORDER BY:SELECT col FROM t GROUP BY col ORDER BY col ASC;​
sysVars​
检查系统变量的废弃 / 删除 / 默认值变更:验证配置的系统变量是否在 8.0 中被废弃、删除或默认值变更(如 innodb_file_format)。​
Error​
  • 问题:使用废弃变量(如 innodb_file_format)。​
  • 影响:配置失效。 修复:移除或替换变量。​
zeroDates​
检查零值日期时间:检测是否存在 0000-00-00 等非法日期时间值,需修复或关闭 NO_ZERO_DATE 模式。​
Warning​
  • 问题:存在零值日期(如0000-00-00)。​
  • 影响:升级后插入失败。​
  • 修复:更新数据:UPDATE t SET date_col='1970-01-01' WHERE date_col='0000-00-00';​
schemaInconsistency​
检查因文件删除或损坏导致的元数据不一致:验证表定义文件(.frm)与存储引擎数据是否一致,避免升级时元数据错误。​
Error​
  • 问题:表文件(.frm/.ibd)损坏或丢失。​
  • 影响:表无法访问。​
  • 修复:从备份恢复或重建表。​
engineMixup​
检查引擎归属冲突的表:检测 InnoDB 引擎是否错误地管理了其他引擎(如 MyISAM)的表,需修复引擎定义。​
Error​
  • 问题:InnoDB 引擎与元数据声明不一致。​
  • 影响:表访问错误。​
  • 修复:重建表结构:CREATE TABLE t_new LIKE t; INSERT t_new SELECT * FROM t; RENAME TABLE t TO t_old, t_new TO t;​
checkTableCommand​
检查 CHECK TABLE 命令报告的问题:确保所有表通过 CHECK TABLE 验证,未报告损坏或索引错误。​
Warning​
  • 问题:CHECK TABLE 报告错误。​
  • 影响:数据损坏风险。​
  • 修复:修复表:REPAIR TABLE t;​
changedFunctionsInGeneratedColumns​
检查语义变更的函数索引:检测函数索引是否依赖旧版行为(如表达式长度限制),需重新评估其有效性。​
Warning​
  • 问题:函数索引语义变更(如 SUBSTRING() 行为变化)。​
  • 影响:查询结果异常。​
  • 修复:重建索引:ALTER TABLE t DROP INDEX idx, ADD INDEX idx ((SUBSTRING(col,1,10)));​
columnsWhichCannotHaveDefaults​
检查不允许默认值的列:识别 BLOB、TEXT 等不支持默认值的列定义,需调整表结构。​
Error​
  • 问题:BLOB/TEXT 列设置默认值。​
  • 影响:表创建失败。​
  • 修复:移除默认值:ALTER TABLE t ALTER COLUMN c DROP DEFAULT;​
invalid57Names​
检查无效的表名或库名:检测是否包含特殊字符(如 / 或 .)的命名,需重命名以满足 8.0 命名规范。​
Error​
  • 问题:对象名含特殊字符(如 #)。​
  • 影响:升级失败。​
  • 修复:重命名:ALTER DATABASE `\#mysql50#` UPGRADE DATA DIRECTORY NAME;​
orphanedObjects​
检查孤立的存储过程或事件:识别因依赖对象删除导致的无效存储过程或事件,需清理或重新定义。​
Error​
  • 问题:存储过程依赖的数据库已删除。​
  • 影响:升级失败。​
  • 修复:删除孤立对象:DROP PROCEDURE orphaned_proc;​
dollarSignName​
检查对象名中的单美元符号:检测是否在对象名中使用($)符号(如 $event),需改为其他命名格式。​
Warning​
  • 问题:对象名以 $ 开头但未闭合。​
  • 影响:语法警告。​
  • 修复:重命名为 $name$ 格式。​
indexTooLarge​
检查超大的无效索引:验证索引长度是否超过 3072 字节(InnoDB 限制),需缩短索引或使用前缀索引。​
Error​
  • 问题:索引超过 3072 字节(冗余行格式)。​
  • 影响:表无法访问。​
  • 修复:启用动态行格式:ALTER TABLE t ROW_FORMAT=DYNAMIC;​
emptyDotTableSyntax​
检查例程中已弃用的表名前缀语法:检测存储过程是否使用 .<table> 格式引用表(如 db.table),需改为标准格式。​
Error​
  • 问题:存储过程使用 .<table> 语法。​
  • 影响:语法错误。​
  • 修复:改用完整限定名:db.table。​
invalidEngineForeignKey​
检查跨引擎的外键:识别外键关联不同存储引擎的表(如 InnoDB 引用 MyISAM 表),需统一引擎。​
Error​
  • 问题:外键跨引擎(如 InnoDB 引用 MyISAM)。​
  • 影响:外键失效。​
  • 修复:统一引擎:ALTER TABLE t ENGINE=InnoDB;​
authMethodUsage​
检查已废弃或无效的用户认证方法:检测是否使用旧版密码哈希(如 mysql_old_password),需升级为 caching_sha2_password。​
Warning​
  • 问题:使用了旧版密码哈希。​
  • 影响:客户端连接失败。​
  • 修复:迁移用户:ALTER USER 'user' IDENTIFIED WITH caching_sha2_password BY 'password';​
pluginUsage​
检查已废弃或移除的插件:识别是否加载了已废弃的插件(如 partition 或 innodb_plugin),需禁用或替换。​
Warning​
  • 问题:加载已移除插件(如 partition)。​
  • 影响:插件不可用。​
  • 修复:卸载插件:UNINSTALL PLUGIN partition;​
deprecatedDefaultAuth​
检查系统变量中的默认认证方法:验证 default_authentication_plugin 是否设置为无效值(如 mysql_native_password)。​
Warning​
  • 问题:default_authentication_plugin 设置为旧值。​
  • 影响:新用户认证失败。​
  • 修复:更新变量:SET GLOBAL default_authentication_plugin='caching_sha2_password';​
deprecatedRouterAuthMethod​
检查 MySQL Router 内部账户的认证方法:确保 Router 使用的内部账户未依赖旧版认证协议。​
Warning​
  • 问题:Router 内部账户使用旧认证方式。​
  • 影响:Router 启动失败。​
  • 修复:升级 Router 至最新版本。​
deprecatedTemporalDelimiter​
检查表分区中的废弃时间分隔符:检测分区定义是否使用冒号(如 1990:01),需改用标准日期格式。​
Error​
  • 问题:分区使用冒号分隔时间(如 1990:01)。​
  • 影响:分区不可访问。​
  • 修复:改用标准格式:PARTITION p VALUES LESS THAN ('1990-01')​
invalidUTF8MB3Character​
​
检查无效的 utf8mb3 字符:检测数据库中是否有无效的 utf8mb3 字符。​
​
Error​
  • 问题:存在不支持字符。​
  • 影响:升级失败。​
  • 修复:通过查看 information_schema 系统库,检查元数据是否含有非法字符,若存在非法字符,删除非法字符。​
​
最近更新时间:2026.10.23 16:15:23
这个页面对您有帮助吗?
有用
有用
无用
无用