rds for mysql 5.7版本升级到8.0-j9九游会登录
操作场景
用户可以将rds for mysql 5.7版本实例升级到最新8.0版本,体验更丰富的版本能力。
升级方案
大版本升级过程中会创建一个高版本的目标实例,然后将源实例数据同步到目标实例,再切换vip,完成整个升级流程。
云数据库 rds for mysql支持通过以下两种方式升级实例大版本:
- 通过rds界面升级大版本:关于内核版本的功能,请参见华为云rds for mysql内核版本说明。
如需通过界面升级大版本,您可以在管理控制台右上角,选择“”,提交权限申请。
- 通过drs升级大版本:通过drs迁移功能将rds for mysql低版本实例迁移到高版本。
介绍视频
升级须知
|
阶段 |
注意事项 |
功能限制 |
|---|---|---|
|
升级前 |
|
|
|
升级中 |
|
|
|
升级后 |
|
|
操作步骤
- 单击管理控制台左上角的
,选择区域。 - 单击页面左上角的
,选择“数据库 > 云数据库 rds”,进入rds信息页面。 - 在“实例管理”页面,单击主实例名称。
- 在“概览”页面的“数据库引擎版本”处,单击“升级数据库版本”。
图1 升级数据库大版本
- 在弹出框中,确认升级信息,然后单击“下一步”。
图2 升级信息确认
- 升级预检查。
图3 开始预检查
预检查结束后,根据预检查结果参考表3进行修复。
修复完成后,单击“重新检查”再次下发检查,直到“检查实例状态”和“检查参数”全部是“已完成”,然后单击“下一步”。
图4 预检查完成
- 选择升级方式,单击“确定”。
- 立即升级:系统会立即升级您的数据库版本到当前5.7或8.0最新版本。
- 可维护时间段内升级:系统会在您设置的可维护时间段内,升级您的数据库版本到当前5.7或8.0最新版本。详情请参见设置可维护时间段。
图5 选择升级方式
如果升级失败,参考表4进行修复。
rds for mysql支持通过drs将rds for mysql 5.7版本数据迁移到8.0版本。使用该方式进行大版本升级,需要提前准备好待迁移到的目标版本数据库实例。
您可以在“实例管理”页面,单击目标实例名称,在页面右上角,单击“迁移数据库”,进入数据复制服务信息页面。
具体迁移操作,请参见《数据复制服务用户指南》的“”内容。
|
源数据库版本 |
目标数据库版本 |
迁移类型 |
|---|---|---|
|
rds for mysql/自建mysql/其他云mysql
|
rds for mysql
|
mysql数据库版本升级 |
drs仅支持从低版本迁移到高版本。
升级预检查及升级失败的修复建议
|
预检查项 |
检查内容 |
修复建议 |
|---|---|---|
|
utf8mb3check |
检查字符集utf8mb3。 |
mysql 5.7中,字符集utf8等同于utf8mb3, mysql 8.0中,字符集utf8等同于utf8mb4, 请注意升级后如果使用utf8创建表格,相当于使用字符集utf8mb4。 用户无需处理该项检查。 |
|
removedsysvars |
检查已移除的系统参数。 |
系统参数在mysql 8.0中已删除。 该检查项不影响升级,用户无需处理。 |
|
sysvarsnewdefaults |
检查系统参数默认值变化。 |
系统参数在mysql 8.0中的默认值发生变化,如果您修改过该参数的值,升级后保留修改后的值,如果未修改过,将采用新的默认值。 该检查项不影响升级,用户无需处理。 |
|
zerodatescheck |
检查使用了零日期、日期时间和时间戳。 |
mysql 8.0.16及以后版本,将零值日期(例:“2024-00-00”)作为查询条件时,mysql将该字符串转换为date,如果转换失败,该查询将报错。 该检查项不影响升级,但影响升级后的查询逻辑。用户无需处理global.sql_mode的报错,建议排查是否存在此类值,如果存在,修改为非零值。 |
|
enumsetelementlenghtcheck |
检查enum/set列元素长度。 |
元素长度大于255个字符,请修改到不超过255个字符。 |
|
reservedkeywordscheck |
检查保留字。 |
与mysql 8.0中的保留字冲突,请修改名字。 |
|
mysqldollarsignnamecheck |
检查$符号。 |
数据库对象名包含“$”,请修改。 |
|
mysqlinvalid57namescheck |
检查非法库名/表名/列名等。 |
包含非法名字,请修改。 |
|
groupbyasccheck |
检查group by asc/desc语法。 |
mysql 8.0移除了group by asc/desc语法,请修改数据库对象,可将asc/desc关键字从 group by子句中移除,并放置在适当的order by子句中。 |
|
checktableoutput |
通过"check table x for upgrade"检查表存在的问题。 |
根据检查结果中的“说明”进行修复。 |
|
enginemixupcheck |
检查 innodb 识别了属于其他引擎的表的情况。 |
表格被 innodb引擎识别,但 sql 层认为它们属于另一个引擎,请解决。 |
|
foreignkeylengthcheck |
检查外键约束名长度。 |
外键约束名长度不得超过64个字符,请修改。 |
|
nonnativepartitioningcheck |
检查使用了非本地分区引擎的分区表的情况。 |
mysql 8.0仅支持innodb 和 ndb作分区表引擎,请转换为innodb引擎,或删除其分区。 |
|
routinessyntaxcheck |
检查语法不兼容的情况。 |
存储过程、函数等数据库对象的定义包含了不兼容的语法,例如与mysql8.0中的保留字冲突,请根据检查结果中的“说明”做修改。 |
|
maxdbflagcheck |
检查是否使用了过时的 maxdb sql_mode标志。 |
mysql 8.0删除了sql_mode中的maxdb选项,请修改sql_mode参数,不使用maxdb。 |
|
sqlmodeflagcheck |
检查是否使用了过时的sql_mode标志。 |
mysql 8.0删除了部分sql_mode标志,请根据检查结果中的“说明”,修改sql_mode参数。 |
|
removedsyslogvars |
检查已移除的系统日志系统参数。 |
mysql 8.0移除了部分系统日志系统参数,请知悉。 用户无需处理该项检查结果。 |
|
mysqlindextoolargecheck |
检查索引长度。 |
mysql 5.7和mysql 8.0都支持相同长度的索引,最大索引长度为767字节,在mysql 8.0 utf8mb4编码下,最大支持191个字符;请修改索引长度至不超过191个字符。 |
|
circulardirectorycheck |
检查表空间数据文件路径使用循环目录。 |
目标版本不支持表空间在数据文件路径中包含循环目录引用(例如“/../”),请处理。 |
|
columnswhichcannothavedefaultscheck |
检查列默认值。 |
blob、text、geometry或json等类型的列不允许设置默认值,请通过alter table语句删除默认值。 |
|
removedfunctionscheck |
检查已移除的函数。 |
目标版本删除了部分函数,请根据检查结果中的“说明”,修改相应数据库对象。 |
|
mysqlorphanedroutinescheck |
检查孤立的存储过程或函数等。 |
孤立的存储过程或函数等指其引用的数据库对象已不存在,无法运行,请删除。 |
|
mysqlemptydottablesyntaxcheck |
检查废弃的标识符。 |
请根据检查结果中的“说明”,修改对应数据库对象中的标识符。 |
|
mysqlschemacheck |
检查表名冲突。 |
mysql8.0新增部分表,请通过rename table语句修改存在冲突的表名。 |
|
mysqlinvalidengineforeignkeycheck |
检查外键约束指向其他引擎的表。 |
请通过alter table语句修改引擎,或删除外键引用。 |
|
lowercasenamecheck |
检查参数lower_case_table_names=1时,是否存在大写表名 |
参数lower_case_table_names=1时,如果存在大写表名,将导致升级失败;请先修改lower_case_table_names=0,通过rename table语句将检查结果中的大写表名修改为小写,再将lower_case_table_names的值修改回1。 |
|
specvarinconfigfilecheck |
检查配置文件中 sql_mode、loose_tls_version 是否有过时的值。 |
目标版本移除了部分sql_mode标志,mysql8.0.28及其以上,loose_tls_version参数不支持tlsv1和tlsv1.1,请根据检查结果修改sql_mode或loose_tls_version参数的值。 |
|
reversedusercheck |
检查是否创建了创建 mysql.infoschema@localhost。 |
mysql8.0内置mysql.infoschema@localhost账号,如mysql5.7存在此账号,将导致升级失败,升级前请删除该账号。 |
|
schemainconsistencycheck |
检查表文件移除或损坏导致的数据库结构不一致问题。 |
表文件.frm缺失,请申请处理。 |
|
geometryindexcheck |
检查空间坐标作为索引时是否为空间索引。 |
目标版本中,空间坐标作索引时必须为空间索引,请重建索引或删除索引。 |
|
danglingindexcheck |
检查是否存在空悬索引。 |
全文索引列删除导致fts_doc_id空悬的表,需要进行 optimize table修复。 |
|
viewcolumncheck |
检查视图列名长度。 |
目标版本中视图列名长度不可超过64个字符,请通过alter view语句修改列名。 |
|
partitionedtablesinsharedtablespacecheck |
检查分区表是否在共享表空间。 |
目标版本不支持共享表空间,请通过alter table语句将它们移动到独立表空间。 |
|
partitionsreferencedcheck |
检查分区表是否被普通表通过外键引用。 |
分区表不可被普通表引用,请删除外键引用。 |
|
partitionsrangedatecheck |
检查按时间分区的分区表。 |
mysql 8.0按时间分区时,时间列内容要求是标准的格式(例如:'yyyy-mm-dd hh:mm:ss' 或 'yy-mm-dd hh:mm:ss'),并修改相应表中时间数值为标准格式。 |
预检查通过后,启动升级流程。如果升级失败,请参考表4处理。
|
问题描述 |
影响 |
修复建议 |
|---|---|---|
|
rds for mysql 5.7升级到8.0后,由于默认字符集变更,导致执行部分sql时索引失效。 5.7默认使用utf8mb3字符集,8.0默认使用utf8mb4字符集。 |
5.7版本使用默认字符集建表,在升级过程中,字符集不会自动变更为8.0版本默认字符集,若用户在内核升级到8.0后建表,同时对两张字符集不同的表进行join等操作,影响sql执行时索引选择,最终导致sql执行时间变长。 |
修改8.0的库、表、字段字符集、以及默认字符集,与5.7的字符集一致。 |
|
rds for mysql 5.7升级到8.0过程中,删除了全文索引,可能会导致升级失败。 |
可能会导致升级失败。 |
执行optimize table重建表;并排查空悬fts_doc_id,详见表3。 |
|
rds for mysql 5.7升级到8.0过程中,由于含有分区表外键约束(通过参数foreign_key_check设置),导致升级失败。 |
导致升级失败。 |
移除该外键约束。 |
|
5.7版本中含有definer列为空的“mysql.events”表,会导致rds for mysql 5.7升级到8.0失败。 |
导致升级失败。 |
将definer列设置为非空。 |
|
rds for mysql 5.7升级到8.0过程中,server层和innodb层列名大小写不匹配导致升级失败。 |
导致升级失败。 |
执行optimize table重建表。 |
|
rds for mysql 5.7升级到8.0过程中,索引中包含的字段在server层和innodb层中大小写不一致导致升级失败。 |
导致升级失败。 |
执行optimize table重建表。 |
|
使用8.0不支持的“btree spatial index”,会导致rds for mysql 5.7升级到8.0失败。 |
导致升级失败。 |
删除“btree spatial index”索引。 |
常见问题
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

