• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 在Unix / Linux上升级MySQL

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

    • 就地升级
    • 逻辑升级
    • MySQL集群升级

    就地升级

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

    注意

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

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

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

    要执行就地升级:

    1. 参见“开始之前”中的信息。
    2. 通过完成“准备安装进行升级”中的初步检查,确保安装已准备就绪。
    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_SCHEMA和性能模式sys保持最新,并检查所有用户模式是否与当前版本的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已成功运行,则第二次启动服务器时不应出现此类消息。

    注意

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

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

    逻辑升级

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

    注意

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

    警告

    由于新的,更改的,不推荐的或删除的特性和功能引入的不兼容性,将从先前的MySQL版本中提取的SQL应用于新的MySQL版本可能会导致错误。因此,从先前的MySQL版本中提取的SQL可能需要进行修改才能启用逻辑升级。

    要在升级到最新的MySQL 8.0版本之前发现不兼容性,请执行“为升级准备安装”中所述的步骤。

    要执行逻辑升级:

    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。有关安装说明,请参见安装和升级MySQL
    5. 初始化新的数据目录,如“初始化数据目录”中所述。例如:

      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 &
        
    注意

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

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

    注意

    加载包含MySQL 5.7 mysql模式的转储文件会重新创建两个不再使用的表: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