暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

2.11.6在Unix / Linux上升级MySQL二进制或基于软件包的安装

原创 由迪 2020-11-02
1464

本节介绍如何在Unix / Linux上升级MySQL二进制和基于软件包的安装。描述了就地和逻辑升级方法。

就地升级

就地升级包括关闭旧的MySQL服务器,用新的MySQL二进制文件或程序包替换旧的MySQL二进制文件或程序包,在现有数据目录上重新启动MySQL以及升级现有安装中需要升级的任何其余部分。有关可能需要升级的内容的详细信息,请参见 第2.11.3节“ MySQL升级过程将进行哪些升级”

注意

如果要升级最初通过安装多个RPM软件包而产生的安装,请升级所有软件包,而不仅仅是某些软件包。例如,如果您以前安装了服务器和客户端RPM,则不要仅升级服务器RPM。

对于某些Linux平台,从RPM或Debian软件包安装的MySQL包括对管理MySQL服务器启动和关闭的系统支持。在这些平台上, 未安装mysqld_safe。在这种情况下,请使用systemd来启动和关闭服务器,而不要使用以下说明中使用的方法。请参见 第2.5.9节“使用systemd管理MySQL服务器”

有关MySQL Cluster安装的升级,另请参见 MySQL Cluster Upgrade

要执行就地升级:

  1. 查看 第2.11.1节“开始之前”中的信息

  2. 通过完成第2.11.5节“准备安装进行升级”中的初步检查,确保安装已准备就绪 。

  3. 如果您将XA事务与结合使用InnoDB,请XA RECOVER在升级前运行以检查未提交的XA事务。如果返回结果,则通过发出XA COMMITor XA ROLLBACK语句来提交或回滚XA事务 。

  4. 如果存在加密的InnoDB 表空间,请通过执行以下语句来旋转密钥环主密钥:

    ALTER INSTANCE ROTATE INNODB MASTER KEY;
  5. 如果您通常运行配置innodb_fast_shutdown2(冷关闭)的MySQL服务器 ,请通过执行以下任一语句将其配置为执行快速或慢速关闭:

    SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown

    通过快速关闭或缓慢关闭,可以InnoDB 将其撤消日志和数据文件保持在可以处理的状态,以防止两个版本之间的文件格式不同。

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

    mysqladmin -u root -p shutdown
    
  7. 升级MySQL二进制文件或软件包。如果要升级二进制安装,请解压缩新的MySQL二进制分发包。请参阅 获取和解压缩发行版。对于基于软件包的安装,请安装新软件包。

  8. 使用现有数据目录启动MySQL 8.0服务器。例如:

    mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
    

    如果存在加密的InnoDB 表空间,请使用该 --early-plugin-load选项来加载密钥环插件。

    启动MySQL 8.0服务器时,它将自动检测是否存在数据字典表。如果不是,则服务器在数据目录中创建它们,并用元数据填充它们,然后继续其正常的启动顺序。在此过程中,服务器将升级所有数据库对象的元数据,包括数据库,表空间,系统和用户表,视图以及存储的程序(存储过程和函数,触发器和事件调度程序事件)。服务器还会删除以前用于元数据存储的文件。例如,从MySQL 5.7升级到MySQL 8.0后,您可能会注意到表不再包含 .frm文件。

    如果此步骤失败,则服务器会将所有更改还原到数据目录。在这种情况下,您应该删除所有重做日志文件,在同一数据目录上启动MySQL 5.7服务器,并修复所有错误的原因。然后对5.7服务器执行另一次缓慢关闭,并启动MySQL 8.0服务器再试一次。

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

    • 从MySQL 8.0.16开始,服务器将作为上一步的一部分进行操作,mysql在MySQL 5.7和MySQL 8.0之间对系统数据库进行所需的任何更改 ,以便您可以利用新的特权或功能。它还使MySQL 8.0的性能模式, INFORMATION_SCHEMAsys数据库保持最新状态,并检查所有用户数据库是否与当前版本的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=/path/to/existing-datadir &
      

      第一次启动MySQL 8.0服务器时(在较早的步骤中),您可能会在错误日志中注意到有关未升级表的消息。如果 mysql_upgrade已成功运行,则第二次启动服务器时不应出现此类消息。

注意

升级过程不会升级时区表的内容。有关升级说明,请参见 第5.1.15节“ MySQL服务器时区支持”

如果升级过程使用mysql_upgrade (即MySQL 8.0.16之前的版本),则该过程也不升级帮助表的内容。有关这种情况下的升级说明,请参见 第5.1.17节“服务器端帮助支持”

逻辑升级

逻辑升级包括使用备份或导出实用程序(如mysqldumpmysqlpump)从旧的MySQL实例中导出SQL ,安装新的MySQL服务器以及将该SQL应用于新的MySQL实例。有关可能需要升级的内容的详细信息,请参见第2.11.3节“ MySQL升级过程将进行哪些升级”

注意

对于某些Linux平台,从RPM或Debian软件包安装的MySQL包括对管理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 --force > data-for-upgrade.sql
    

    注意

    如果您的数据库包含存储的程序, 请在MySQLdump中使用--routines--events选项 (如上所示)。该 选项包括转储中的所有数据库,包括保存系统表的 数据库。 --all-databasesmysql

    重要

    如果您的表包含生成的列,请使用MySQL 5.7.9或更高版本提供的 mysqldump实用程序来创建转储文件。早期版本中提供的 mysqldump实用程序对生成的列定义使用了不正确的语法(错误号20769542)。您可以使用该 INFORMATION_SCHEMA.COLUMNS 表来标识具有生成的列的表。

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

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

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

    mysqld --initialize --datadir=/path/to/8.0-datadir
    

    复制'root'@'localhost' 显示在屏幕上的临时密码或将其写入错误日志以供以后使用。

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

    mysqld_safe --user=mysql --datadir=/path/to/8.0-datadir &
    
  7. 重设root密码:

    shell> mysql -u root -p
    Enter password: ****  <- enter temporary root password
    
    mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
  8. 将先前创建的转储文件加载到新的MySQL服务器中。例如:

    mysql -u root -p --force < data-for-upgrade.sql
    

    注意

    gtid_mode=ON如果转储文件包含系统表, 则不建议在服务器()上启用GTID时加载转储文件。 mysqldump为使用非事务性MyISAM存储引擎的系统表发出DML指令,并且当启用GTID时不允许这种组合。还应注意,将已启用GTID的服务器上的转储文件加载到已启用GTID的另一台服务器中,会生成不同的事务标识符。

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

    • 在MySQL 8.0.16及更高版本中,关闭服务器,然后使用--upgrade=FORCE选项执行其余的升级任务重新启动服务器 :

      mysqladmin -u root -p shutdown
      mysqld_safe --user=mysql --datadir=/path/to/8.0-datadir --upgrade=FORCE &
      

      使用重启时 --upgrade=FORCE,服务器会mysql在MySQL 5.7和MySQL 8.0之间的系统架构中进行任何所需的更改 ,以便您可以利用新的特权或功能。它还使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=/path/to/8.0-datadir &
      

注意

升级过程不会升级时区表的内容。有关升级说明,请参见 第5.1.15节“ MySQL服务器时区支持”

如果升级过程使用mysql_upgrade (即MySQL 8.0.16之前的版本),则该过程也不升级帮助表的内容。有关这种情况下的升级说明,请参见 第5.1.17节“服务器端帮助支持”

注意

加载包含MySQL 5.7mysql模式的转储文件会 重新创建两个不再使用的表:eventproc。(对应的MySQL 8.0表是eventsroutines,这两个表都是数据字典表,并受到保护。)在您满意升级成功后,可以通过执行以下SQL语句删除eventproc表:

DROP TABLE mysql.event; DROP TABLE mysql.proc;

MySQL集群升级

本节中的信息是一种辅助的就地升级过程中所述 就地升级,使用的,如果你要升级MySQL集群。

从MySQL 8.0.16开始,可以按照通常的三个有序步骤将MySQL Cluster升级作为常规滚动升级执行:

  1. 升级MGM节点。
  2. 一次升级一个数据节点。
  3. 一次升级一个API节点(包括MySQL服务器)。

升级每个节点的方式与MySQL 8.0.16之前的方式几乎相同,因为升级数据字典和升级系统表之间是分开的。升级每个人有两个步骤 mysqld

  1. 导入数据字典。

    使用--upgrade=MINIMAL选项升级数据字典而不是系统表来启动新服务器 。这与启动服务器而不调用mysql_upgrade的MySQL 8.0.16之前的操作基本相同 。

    必须连接MySQL服务器才能NDB 完成此阶段。如果存在任何表NDBNDBINFO表,并且服务器无法连接到集群,则会退出并显示错误消息:

    Failed to Populate DD tables.
    
  2. 升级系统表。

    在MySQL 8.0.16之前,DBA调用 mysql_upgrade客户端来升级系统表。从MySQL 8.0.16开始,服务器执行以下操作:要升级系统表,请在不使用该选项的情况下 重新启动每个单独的mysqld--upgrade=MINIMAL

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论