安装新版本的MySQL可能需要升级现有安装的这些部分:
的
mysql
系统架构,其中包含存储MySQL Server在运行时存储信息的表(参见5.3节,“mysql系统架构”)。mysql
模式表分为两大类:数据字典表,存储数据库对象元数据。
系统表(即,剩余的非数据字典表),用于其他操作目的。
其他模式,其中一些内置并可考虑”拥有”由服务器,其他人不是:
性能模式,
Information_Schema.
,ndbinfo.
, 和SYS.
模式。用户模式。
两个不同的版本号与可能需要升级的安装部分相关联:
数据字典版本。这适用于数据字典表。
服务器版本,也称为MySQL版本。这适用于其他模式中的系统表和对象。
在这两种情况下,适用于现有MySQL安装的实际版本存储在数据字典中,并将当前的预期版本编译为新版本的MySQL。当实际版本低于当前预期版本时,必须升级与该版本相关联的安装的那些部分到当前版本。如果两个版本都表示需要升级,则必须首先发生数据字典升级。
作为刚才提到的两个不同版本的反映,升级发生在两个步骤中:
步骤1:升级数据字典。
此步骤升级:
数据字典表中的数据字典表
mysql
模式。如果实际的数据字典版本低于当前的预期版本,那么服务器将使用更新的定义创建数据字典表,将持久化的元数据复制到新表中,原子式地用新表替换旧表,并重新初始化数据字典。性能模式,
Information_Schema.
, 和ndbinfo.
.
步骤2:服务器升级。
此步骤包括所有其他升级任务。如果现有MySQL安装的服务器版本低于新安装的MySQL版本,则必须升级其他所有内容:
系统表中的系统表
mysql
架构(剩余的非数据字典表)。的
SYS.
模式。用户模式。
数据字典升级(第1步)由服务器负责,服务器在启动时根据需要执行该任务,除非调用了一个选项阻止它这样做。的选择是——升级=没有
截至MySQL 8.0.16,- nno-dd-upgrade
MySQL 8.0.16之前。
如果数据字典已经过期,但是服务器被阻止升级它,那么服务器将不运行,并退出并返回一个错误。例如:
[ERROR] [MY-013381] [Server]服务器关闭,因为需要升级,但被命令行选项'——upgrade=NONE'禁止。[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine . [ERROR] [MY-010020] [Server]数据字典初始化失败。
MySQL 8.0.16中发生了对第2步的责任的一些变化:
在MySQL 8.0.16之前,mysql_upgrade.升级性能架构,
Information_Schema.
以及步骤2中描述的对象。预期DBA将调用mysql_upgrade.启动服务器后手动。作为MySQL 8.0.16,服务器执行以前处理的所有任务mysql_upgrade..虽然升级仍然是两步操作,但服务器执行它们,导致更简单的过程。
根据要升级的MySQL版本,指令就地升级和逻辑升级指示服务器是否执行所有升级任务,或者您是否也必须调用mysql_upgrade.在服务器启动之后。
因为服务器升级了性能模式,Information_Schema.
,以及STEP 2中描述的对象,如MySQL 8.0.16,mysql_upgrade.不必要地,并被贬值,因为该版本;我们希望在MySQL的未来版本中移除它。
在步骤2期间发生的大多数方面是MySQL 8.0.16之前的相同,尽管可能需要不同的命令选项来实现特定效果。
从MySQL 8.0.16开始——升级
服务器选项控制服务器是否在启动时执行自动升级:
没有选择或与
- aupgrade = auto.
,服务器升级任何它认为过时的东西(步骤1和2)。和
——升级=没有
,服务器升级了(跳过步骤1和2),但如果必须升级数据字典,则退出错误。不可能使用过时的数据字典运行服务器;服务器坚持要升级它或退出。和
- aupgrade =最小
,服务器升级数据字典,性能架构和Information_Schema.
,如有必要(步骤1)。请注意,在使用此选项升级后,无法启动组复制,因为未更新复制内部依赖的系统表,并且在其他领域也可能显而易见。和
——升级=力
,服务器升级数据字典,性能架构和Information_Schema.
如有必要(步骤1),并强制升级其他一切(步骤2)。如果服务器检查所有模式中的所有对象,则期望服务器启动需要更长时间。
力量
如果服务器认为不需要执行第2步操作,则强制执行这些操作是有用的。的一种方法力量
不同于汽车
是的力量
,服务器将重新创建系统表,如帮助表或时区表(如果它们缺失)。
以下列表显示MySQL 8.0.16之前的升级命令以及MySQL 8.0.16及更高版本的等效命令:
执行正常升级(必要时步骤1和步骤2):
在MySQL 8.0.16之前:mysqld.其次是mysql_upgrade.
截至MySQL 8.0.16:mysqld.
如有必要,只执行第1步:
在MySQL 8.0.16之前:在排除步骤2中描述的那些时无法执行步骤1中描述的所有升级任务。但是,您可以避免升级用户模式和
SYS.
模式使用mysqld.其次是mysql_upgrade.与之- upgrade-system-tables
和- skip-sys-schema
选项。截至MySQL 8.0.16:mysqld——升级=最小
必要时执行第1步,强制执行第2步:
在MySQL 8.0.16之前:mysqld.其次是mysql_upgrade——力
截至MySQL 8.0.16:mysqld - upgrade = force
在MySQL 8.0.16之前,肯定的mysql_upgrade.选项会影响它执行的操作。下表显示了哪个服务器——升级
选项值用作MySQL 8.0.16以实现类似效果。(这些不一定是精确的等价物,因为给定的——升级
选项值可能具有额外的效果。)
mysql_upgrade选项 | 服务器选项 |
---|---|
- skip-sys-schema |
——升级=没有 或者- aupgrade =最小 |
- upgrade-system-tables |
——升级=没有 或者- aupgrade =最小 |
——力 |
——升级=力 |
关于升级步骤2中发生的其他注意事项:
第2步安装
SYS.
架构如果未安装它,并且否则将其升级到当前版本。如果一个错误会发生错误SYS.
模式已存在但没有版本
视图,假设它的缺席表示用户创建的模式:SYS架构存在,没有系统.Version视图。如果您创建了用户创建的SYS架构,则必须重命名升级以取得成功。
要在这种情况下升级,请删除或重命名现有的
SYS.
架构首先。然后再次执行升级过程。(可能需要强制执行步骤2.)为了防止
SYS.
模式检查:as mysql 8.0.16:使用该服务器启动服务器
——升级=没有
或者- aupgrade =最小
选项。MySQL 8.0.16之前:Invokemysql_upgrade.与之
- skip-sys-schema
选项。
步骤2根据需要处理所有用户模式中的所有表。表检查可能需要很长时间才能完成。每个表都被锁定,因此在处理时对其他会话不可用。检查和修复操作可能是耗时的,特别是对于大型表。表检查使用
升级
选择的检查表
陈述。有关此选项需要的详细信息,请参阅第13.7.3.2节,“检查表语句”.防止检查表:
as mysql 8.0.16:使用该服务器启动服务器
——升级=没有
或者- aupgrade =最小
选项。MySQL 8.0.16之前:Invokemysql_upgrade.与之
- upgrade-system-tables
选项。
强制表检查:
as mysql 8.0.16:使用该服务器启动服务器
——升级=力
选项。MySQL 8.0.16之前:Invokemysql_upgrade.与之
——力
选项。
步骤2在命名的文件中保存MySQL版本号
mysql_upgrade_info
在数据目录中。忽略这一点
mysql_upgrade_info
无论如何,文件并执行检查:as mysql 8.0.16:使用该服务器启动服务器
——升级=力
选项。MySQL 8.0.16之前:Invokemysql_upgrade.与之
——力
选项。
请注意的
mysql_upgrade_info
文件是弃用;我们希望在MySQL的未来版本中移除它。步骤2用当前MySQL版本号标记所有检查和修复的表。这可以确保在服务器的同一版本进行下一次升级检查时,可以确定是否需要再次检查或修复给定的表。
步骤2升级系统表,以确保它们具有当前的结构。无论服务器或mysql_upgrade.执行步骤。关于帮助表和时区表的内容,mysql_upgrade.不加载任何一种类型的表,而服务器加载帮助表,但不加载时区表。(也就是说,在MySQL 8.0.16之前,服务器只在数据目录初始化时加载帮助表。从MySQL 8.0.16开始,它会在初始化和升级时加载帮助表。)加载时区表的过程依赖于平台,需要DBA做出决策,因此不能自动完成。