本节介绍如何在Unix/Linux上升级MySQL二进制和基于包的安装。描述了就地升级和逻辑升级方法。
就地升级包括关闭旧的MySQL服务器,用新的MySQL二进制文件或包替换旧的MySQL二进制文件或包,在现有数据目录上重新启动MySQL,并升级现有安装中需要升级的任何剩余部分。有关可能需要升级的详细信息,请参见第2.11.3节“MySQL升级过程升级了什么”.
如果您正在升级最初通过安装多个RPM包生成的安装,请升级所有包,而不仅仅是部分包。例如,如果之前安装了服务器RPM和客户端RPM,则不要只升级服务器RPM。
对于某些Linux平台,从RPM或Debian包中安装MySQL包括systemd支持,用于管理MySQL服务器的启动和关闭。在这些平台上,mysqld_safe没有安装。在这种情况下,使用systemd来启动和关闭服务器,而不是使用以下说明中使用的方法。看到第2.5.9节“使用systemd管理MySQL服务器”.
关于MySQL集群安装的升级,参见MySQL集群升级.
使用实例就地升级。
请参阅第2.11.1节“开始之前”.
通过完成初步签入,确保安装的升级准备就绪第2.11.5节“为升级准备安装”.
如果您使用XA事务
InnoDB
、运行XA恢复
在升级之前检查未提交的XA事务。如果返回结果,则提交或回滚XA事务XA提交
或XA回滚
声明。如果您正在从MySQL 5.7.11或更早版本升级到MySQL 8.0,并且有加密
InnoDB
表空间,通过执行以下语句来旋转密匙环主键:修改innodb主键
如果你正常运行你的MySQL服务器配置
innodb_fast_shutdown
设置为2
(冷关机),配置它执行快速或缓慢关机通过执行以下语句之一:SET GLOBAL innodb_fast_shutdown = 1;SET GLOBAL innodb_fast_shutdown = 0;——缓慢关闭
通过快速或缓慢的关机,
InnoDB
在不同版本之间的文件格式不同的情况下,将它的撤消日志和数据文件保持可以处理的状态。关闭旧的MySQL服务器。例如:
Mysqladmin -u root -p shutdown
升级MySQL二进制文件或包。如果升级一个二进制安装,解压新的MySQL二进制发行包。看到获取并解压分发版.对于基于包的安装,请安装新的包。
使用现有的数据目录启动MySQL 8.0服务器。例如:
mysqld_safe——用户= mysql——datadir =/ / existing-datadir /路径&
如果是加密的
InnoDB
表空间,使用——early-plugin-load
选项加载密匙环插件。当您启动MySQL 8.0服务器时,它会自动检测数据字典表是否存在。如果没有,服务器将在数据目录中创建它们,用元数据填充它们,然后继续正常启动顺序。在此过程中,服务器升级所有数据库对象的元数据,包括数据库、表空间、系统和用户表、视图和存储程序(存储过程和函数、触发器和Event Scheduler事件)。服务器还删除以前用于元数据存储的文件。例如,从MySQL 5.7升级到MySQL 8.0后,您可能会注意到表不再有
.frm
文件。如果此步骤失败,服务器将所有更改还原到数据目录。在这种情况下,你应该删除所有的重做日志文件,在相同的数据目录上启动MySQL 5.7服务器,并修复任何错误的原因。然后再次缓慢关闭5.7服务器,并启动MySQL 8.0服务器再次尝试。
在上一步中,服务器根据需要升级数据字典。现在需要执行任何剩余的升级操作:
在MySQL 8.0.16中,服务器作为上一步的一部分执行此操作,在
mysql
MySQL 5.7和MySQL 8.0之间的系统数据库,以便您可以利用新的特权或功能。它还带来了性能架构,INFORMATION_SCHEMA
,sys
MySQL 8.0的最新版本,并检查所有用户数据库与MySQL当前版本的不兼容。在MySQL 8.0.16之前,服务器只升级上一步中的数据字典。MySQL 8.0服务器成功启动后,执行mysql_upgrade执行剩余的升级任务。
Mysql_upgrade -u root -p
然后关闭并重新启动MySQL服务器,以确保对系统表的任何更改都生效。例如:
Mysqladmin -u root -p shutdown mysqld_safe——user=mysql——datadir=/ / existing-datadir /路径&
第一次启动MySQL 8.0服务器时(在前面的步骤中),您可能会注意到错误日志中关于未升级表的消息。如果mysql_upgrade已成功运行,则在第二次启动服务器时不应出现此类消息。
升级过程不升级时区表的内容。有关升级说明,请参见“MySQL服务器时区支持”章节5.1.15.
如果升级过程使用mysql_upgrade(也就是说,在MySQL 8.0.16之前),进程也不升级帮助表的内容。有关这种情况下的升级说明,请参见第5.1.17节,“服务器端帮助支持”.
逻辑升级涉及使用备份或导出工具从旧的MySQL实例导出SQL,例如, mysqldump或mysqlpump,安装新的MySQL服务器,并将SQL应用到新的MySQL实例。有关可能需要升级的详细信息,请参见第2.11.3节“MySQL升级过程升级了什么”.
对于某些Linux平台,从RPM或Debian包中安装MySQL包括systemd支持,用于管理MySQL服务器的启动和关闭。在这些平台上,mysqld_safe没有安装。在这种情况下,使用systemd来启动和关闭服务器,而不是使用以下说明中使用的方法。看到第2.5.9节“使用systemd管理MySQL服务器”.
将从以前的MySQL版本中提取的SQL应用到新的MySQL版本中,可能会由于新的、更改的、弃用的或删除的特性和功能引入的不兼容而导致错误。因此,从以前的MySQL版本中提取的SQL可能需要修改以启用逻辑升级。
要在升级到最新的MySQL 8.0版本之前识别不兼容性,请执行下面描述的步骤第2.11.5节“为升级准备安装”.
执行逻辑升级。
请参阅第2.11.1节“开始之前”.
从以前的MySQL安装中导出现有的数据:
Mysqldump -u root -p——add-drop-table——routines——events——all-databases——强制> data-for-upgrade.sql
请注意使用
——例程
而且——事件
选择与, mysqldump(如上所示),如果您的数据库包含存储程序。的——所有数据库
选项包括转储中的所有数据库,包括mysql
保存系统表的数据库。重要的如果您的表包含生成的列,请使用, mysqldumpMySQL 5.7.9或更高版本提供的实用程序来创建您的转储文件。的, mysqldump早期版本中提供的实用程序对生成的列定义使用了错误的语法(Bug #20769542)。您可以使用
INFORMATION_SCHEMA。列
表来标识具有已生成列的表。关闭旧的MySQL服务器。例如:
Mysqladmin -u root -p shutdown
安装MySQL 8.0。有关安装说明,请参见第二章,安装和升级MySQL.
如中所述,初始化一个新的数据目录第2.10.1节“初始化数据目录”.例如:
mysqld——初始化——datadir =/ / 8.0 -datadir /路径
拷贝临时
“根”@“localhost”
显示在屏幕上或写入错误日志以供以后使用的密码。使用新的数据目录启动MySQL 8.0服务器。例如:
mysqld_safe——用户= mysql——datadir =/ / 8.0 -datadir /路径&
重置
根
密码:shell> mysql -u root -p Enter password: **** <- Enter临时root密码
mysql>修改用户名你的新密码”;
将之前创建的转储文件加载到新的MySQL服务器中。例如:
Mysql -u root -p——force < data-for-upgrade.sql
请注意当服务器上启用gtid时,不建议加载转储文件(
gtid_mode =对
),如果您的转储文件包括系统表。, mysqldump为使用非事务性MyISAM存储引擎的系统表发出DML指令,当启用gtid时,这种组合是不允许的。还要注意,将一个转储文件从一个启用了gtid的服务器加载到另一个启用了gtid的服务器中,会生成不同的事务标识符。执行所有剩余的升级操作:
在MySQL 8.0.16及更高版本中,关闭服务器,然后使用
——升级=力
选项,执行剩余的升级任务:Mysqladmin -u root -p shutdown mysqld_safe——user=mysql——datadir=/ / 8.0 -datadir /路径——升级= &
重启后,
——升级=力
中所需的任何更改mysql
MySQL 5.7和MySQL 8.0之间的系统模式,以便您可以利用新的特权或功能。它还带来了性能架构,INFORMATION_SCHEMA
,sys
模式,并检查所有用户模式与MySQL当前版本的不兼容。在MySQL 8.0.16之前,执行mysql_upgrade执行剩余的升级任务。
Mysql_upgrade -u root -p
然后关闭并重新启动MySQL服务器,以确保对系统表的任何更改都生效。例如:
Mysqladmin -u root -p shutdown mysqld_safe——user=mysql——datadir=/ / 8.0 -datadir /路径&
升级过程不升级时区表的内容。有关升级说明,请参见“MySQL服务器时区支持”章节5.1.15.
如果升级过程使用mysql_upgrade(也就是说,在MySQL 8.0.16之前),进程也不升级帮助表的内容。有关这种情况下的升级说明,请参见第5.1.17节,“服务器端帮助支持”.
正在加载包含MySQL 5.7的转储文件mysql
Schema重新创建两个不再使用的表:事件
而且proc
.(对应的MySQL 8.0表是事件
而且例程
,两者都是受保护的数据字典表。)升级成功后,您可以删除事件
而且proc
通过执行下面的SQL语句:
删除表mysql.event;删除表mysql.proc;
本节中的信息是对中描述的就地升级过程的补充就地升级,如果你正在升级MySQL集群使用。
从MySQL 8.0.16开始,MySQL集群升级可以像常规的滚动升级一样执行,以下是通常的三个有序步骤:
升级米高梅节点。
每次升级一个数据节点。
每次升级一个API节点(包括MySQL服务器)。
升级每个节点的方法与MySQL 8.0.16之前几乎相同,因为在升级数据字典和升级系统表之间存在分离。提升每个个体有两个步骤mysqld
:
导入数据字典。
方法启动新服务器
——升级=最小
选项可升级数据字典,但不升级系统表。这本质上与mysql 8.0.16之前启动服务器而不调用的操作相同mysql_upgrade.MySQL服务器必须连接到
NDB
以完成此阶段。如果有任何NDB
或NDBINFO
表存在,服务器无法连接到集群,它退出并返回一个错误消息:日志含义填充DD表失败。
升级系统表。
在MySQL 8.0.16之前,DBA调用mysql_upgrade客户端升级系统表。从MySQL 8.0.16开始,服务器执行以下操作:要升级系统表,请重新启动每个表mysqld没有
——升级=最小
选择。