10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

MySQL 8.0参考手册/.../ 升级Unix/Linux上的MySQL二进制或基于包的安装

2.11.6升级Unix/Linux下的MySQL二进制或包安装

本节介绍如何在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集群升级

使用实例就地升级。

  1. 请参阅第2.11.1节“开始之前”

  2. 通过完成初步签入,确保安装的升级准备就绪第2.11.5节“为升级准备安装”

  3. 如果您使用XA事务InnoDB、运行XA恢复在升级之前检查未提交的XA事务。如果返回结果,则提交或回滚XA事务XA提交XA回滚声明。

  4. 如果您正在从MySQL 5.7.11或更早版本升级到MySQL 8.0,并且有加密InnoDB表空间,通过执行以下语句来旋转密匙环主键:

    修改innodb主键
  5. 如果你正常运行你的MySQL服务器配置innodb_fast_shutdown设置为2(冷关机),配置它执行快速或缓慢关机通过执行以下语句之一:

    SET GLOBAL innodb_fast_shutdown = 1;SET GLOBAL innodb_fast_shutdown = 0;——缓慢关闭

    通过快速或缓慢的关机,InnoDB在不同版本之间的文件格式不同的情况下,将它的撤消日志和数据文件保持可以处理的状态。

  6. 关闭旧的MySQL服务器。例如:

    Mysqladmin -u root -p shutdown
  7. 升级MySQL二进制文件或包。如果升级一个二进制安装,解压新的MySQL二进制发行包。看到获取并解压分发版.对于基于包的安装,请安装新的包。

  8. 使用现有的数据目录启动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服务器再次尝试。

  9. 在上一步中,服务器根据需要升级数据字典。现在需要执行任何剩余的升级操作:

    • 在MySQL 8.0.16中,服务器作为上一步的一部分执行此操作,在mysqlMySQL 5.7和MySQL 8.0之间的系统数据库,以便您可以利用新的特权或功能。它还带来了性能架构,INFORMATION_SCHEMA,sysMySQL 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,例如, mysqldumpmysqlpump,安装新的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节“为升级准备安装”

执行逻辑升级。

  1. 请参阅第2.11.1节“开始之前”

  2. 从以前的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。列表来标识具有已生成列的表。

  3. 关闭旧的MySQL服务器。例如:

    Mysqladmin -u root -p shutdown
  4. 安装MySQL 8.0。有关安装说明,请参见第二章,安装和升级MySQL

  5. 如中所述,初始化一个新的数据目录第2.10.1节“初始化数据目录”.例如:

    mysqld——初始化——datadir =/ / 8.0 -datadir /路径

    拷贝临时“根”@“localhost”显示在屏幕上或写入错误日志以供以后使用的密码。

  6. 使用新的数据目录启动MySQL 8.0服务器。例如:

    mysqld_safe——用户= mysql——datadir =/ / 8.0 -datadir /路径
  7. 重置密码:

    shell> mysql -u root -p Enter password: **** <- Enter临时root密码
    mysql>修改用户名你的新密码”;
  8. 将之前创建的转储文件加载到新的MySQL服务器中。例如:

    Mysql -u root -p——force < data-for-upgrade.sql
    请注意

    当服务器上启用gtid时,不建议加载转储文件(gtid_mode =对),如果您的转储文件包括系统表。, mysqldump为使用非事务性MyISAM存储引擎的系统表发出DML指令,当启用gtid时,这种组合是不允许的。还要注意,将一个转储文件从一个启用了gtid的服务器加载到另一个启用了gtid的服务器中,会生成不同的事务标识符。

  9. 执行所有剩余的升级操作:

    • 在MySQL 8.0.16及更高版本中,关闭服务器,然后使用——升级=力选项,执行剩余的升级任务:

      Mysqladmin -u root -p shutdown mysqld_safe——user=mysql——datadir=/ / 8.0 -datadir /路径——升级= &

      重启后,——升级=力中所需的任何更改mysqlMySQL 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的转储文件mysqlSchema重新创建两个不再使用的表:事件而且proc.(对应的MySQL 8.0表是事件而且例程,两者都是受保护的数据字典表。)升级成功后,您可以删除事件而且proc通过执行下面的SQL语句:

删除表mysql.event;删除表mysql.proc;

MySQL集群升级

本节中的信息是对中描述的就地升级过程的补充就地升级,如果你正在升级MySQL集群使用。

从MySQL 8.0.16开始,MySQL集群升级可以像常规的滚动升级一样执行,以下是通常的三个有序步骤:

  1. 升级米高梅节点。

  2. 每次升级一个数据节点。

  3. 每次升级一个API节点(包括MySQL服务器)。

升级每个节点的方法与MySQL 8.0.16之前几乎相同,因为在升级数据字典和升级系统表之间存在分离。提升每个个体有两个步骤mysqld

  1. 导入数据字典。

    方法启动新服务器——升级=最小选项可升级数据字典,但不升级系统表。这本质上与mysql 8.0.16之前启动服务器而不调用的操作相同mysql_upgrade

    MySQL服务器必须连接到NDB以完成此阶段。如果有任何NDBNDBINFO表存在,服务器无法连接到集群,它退出并返回一个错误消息:

    日志含义填充DD表失败。
  2. 升级系统表。

    在MySQL 8.0.16之前,DBA调用mysql_upgrade客户端升级系统表。从MySQL 8.0.16开始,服务器执行以下操作:要升级系统表,请重新启动每个表mysqld没有——升级=最小选择。