MySQL升级

来源:互联网 发布:java中文本框取值 编辑:程序博客网 时间:2024/06/03 02:27

本节介绍升级或降级MySQL安装的步骤。

升级是一个常见的过程,因为您在同一个MySQL版本系列中获取错误修复或主要MySQL版本之间的重要功能。您可以在某些测试系统上执行此过程,以确保一切顺利进行,然后再在生产系统上执行。

降级较少见。通常,由于生产系统上发生的某些兼容性或性能问题,您撤销升级,并且在测试系统的初始升级验证过程中未发现升级。与升级过程一样,先在一些测试系统上执行并验证降级过程,然后再将其用于生产系统。


本节介绍如何升级到新的MySQL版本。

  • 支持的升级方法

  • 支持的升级路径

  • 在你开始之前

  • 进行就地升级

  • 执行逻辑升级

  • 升级疑难解答

注意

在下面的讨论中,必须使用具有管理权限的MySQL帐户运行的MySQL 命令包括 在命令行上指定MySQL 用户。需要密码的命令也包括一个 选项。因为后面没有选项值,这样的命令提示输入密码。出现提示时键入密码,然后按Enter键。 -urootrootroot-p-p

可以使用mysql命令行客户端(连接 root以确保您具有必要的权限)执行SQL语句 

支持的升级方法

支持的升级方法包括:

  • 就地升级:涉及关闭旧的MySQL版本,用旧的MySQL二进制文件或软件包替换旧的MySQL二进制文件或软件包,在现有的数据目录上重新启动MySQL,并运行 mysql_upgrade

  • 逻辑升级:涉及使用 mysqldump从旧的MySQL版本导出现有数据 ,安装新的MySQL版本,将转储文件加载到新的MySQL版本以及运行mysql_upgrade

有关就地和逻辑升级过程,请参阅 执行就地升级和 执行逻辑升级

如果您在Windows上运行MySQL Server,请参阅第2.3.8节“在Windows上升级MySQL”中所述的升级步骤

如果您当前的MySQL安装使用MySQL Yum Repository安装在Enterprise Linux平台或Fedora上,请参见第2.11.1.2节“使用MySQL Yum Repository 升级MySQL”

如果您当前的MySQL安装使用MySQL APT存储库安装在Ubuntu上,请参见第2.11.1.3节“使用MySQL APT存储库升级MySQL”

支持的升级路径

除非另有说明,否则支持以下升级路径:

  • 支持从版本系列版本升级到较新的版本系列版本。例如,支持从5.7.9升级到5.7.10。还支持跳过版本系列版本。例如,支持从5.7.9升级到5.7.11。

  • 支持升级一个版本级别。例如,支持从5.6升级到5.7。在升级到下一个版本级别之前,建议升级到最新版本系列版本。例如,升级到5.7之前升级到最新的5.6版本。

  • 支持升级多个版本级别,但只能一次升级一个版本级别。例如,如果您目前正在运行MySQL 5.5并希望升级到较新的系列,请先升级到MySQL 5.6,然后升级到MySQL 5.7,等等。有关升级到MySQL 5.6的信息,请参见“ MySQL 5.6参考手册”

  • 不推荐或支持直接升级,即跳过发布级别(例如,直接从MySQL 5.5升级到5.7)。

以下条件适用于所有升级路径:

  • 支持一般可用性(GA)状态发行版之间的升级。

  • 不支持将里程碑版本(或从里程碑版本到GA版本)升级。例如,不支持从5.7.7升级到5.7.8,因为GA状态也不会被释放。

  • 对于已经达到GA状态的MySQL版本系列版本之间的升级,您可以在具有相同架构的系统上的不同版本之间移动MySQL格式文件和数据文件。这不一定适用于里程碑版本之间的升级。使用里程碑版本由您自己承担风险。

在你开始之前

升级之前,请查看以下信息并执行推荐步骤:

  • 升级前通过创建当前数据库和日志文件的备份来保护数据。备份应该包括mysql系统数据库,其中包含MySQL系统表。请参见 第7.2节“数据库备份方法”

  • 查看 发行说明,其中提供了有关MySQL 5.7中新增功能的信息,或者与早期MySQL版本中发现的功能不同。其中一些更改可能会导致不兼容。

    有关MySQL 5.7中已删除的MySQL服务器功能的说明,请参阅MySQL 5.7中 删除的功能如果使用任何功能,升级需要对这些功能进行更改。

    有关在MySQL 5.7中添加,弃用或删除的MySQL服务器变量和选项的列表,请参见第1.5节“服务器和状态变量以及添加,已弃用或在MySQL 5.7中删除的选项”如果您使用任何这些项目,升级需要配置更改。

  • 查看第2.11.1.1节“影响升级到MySQL 5.7的更改”本节介绍升级之前或之后可能需要采取措施的更改。

  • 如果使用复制,请查看 第16.4.3节“升级复制设置”

  • 如果您使用XA事务InnoDB,请XA RECOVER在升级之前运行 以检查未提交的XA事务。如果返回结果,则通过发出XA COMMIT或 XA ROLLBACK声明提交或回滚XA 事务。

  • 如果您的MySQL安装包含大量可能需要很长时间才能在就地升级后转换的数据,那么您可能会发现创建一个 “ 虚拟 ”数据库实例可用于评估可能需要的转换和所涉及的工作执行它们 制作包含mysql数据库完整副本的MySQL实例的副本以及没有数据的所有其他数据库。在此虚拟实例上运行升级过程,以查看可能需要哪些操作,以便在原始数据库实例上执行实际数据转换时,可以更好地评估所涉及的工作。

  • 当您安装或升级到新版本的MySQL时,建议重新安装和重新安装MySQL语言界面。这适用于MySQL接口,如PHP mysql扩展,PerlDBD::mysql模块和Python MySQLdb模块。

进行就地升级

本节介绍如何执行 就地升级审查 开始 之前,继续。

注意

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

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

执行就地升级:

  1. 查看第2.11.1.1节“影响升级到MySQL 5.7的更改”中所述的更改,以便在 升级之前执行的步骤。

  2. 配置MySQL通过设置innodb_fast_shutdown来 执行缓慢的关闭 0例如:

    mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"

    关闭之前,InnoDB执行完全清除和更改缓冲区合并关闭之前,确保数据文件在发布之间文件格式不同的情况下完全准备好。

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

    mysqladmin -u root -p shutdown
  4. 升级MySQL二进制安装或软件包。如果升级二进制安装,请打开新的MySQL二进制发行版软件包。请参阅 获取和解包分发对于基于软件包的安装,请将旧软件包替换为新软件包。

    注意

    对于受支持的Linux发行版,替代MySQL软件包的首选方法是使用MySQL软件库; 请参见第2.11.1.2节“使用MySQL Yum Repository升级MySQL”, 第2.11.1.3节“使用MySQL APT存储库升级MySQL 或 使用MySQL SLES存储库升级MySQL以获取说明。

  5. 启动MySQL 5.7服务器,使用现有的数据目录。例如:

    mysqld_safe --user=mysql --datadir=/path/to/existing-datadir
  6. 运行mysql_upgrade例如:

    mysql_upgrade -u root -p

    mysql_upgrade检查所有数据库中的所有表与当前版本的MySQL不兼容。mysql_upgrade还升级 mysql系统数据库,以便您可以利用新的特权或功能。

    注意

    当服务器运行时,不应使用 mysql_upgrade--gtid-mode=ON有关详细信息,请参阅 GTID模式和mysql_upgrade。

    mysql_upgrade不会升级帮助表的内容。有关升级说明,请参见 第5.1.10节“服务器端帮助”

  7. 关闭并重新启动MySQL服务器,以确保对系统表进行的任何更改生效。例如:

    mysqladmin -u root -p shutdownmysqld_safe --user=mysql --datadir=/path/to/existing-datadir

执行逻辑升级

本节介绍如何执行 逻辑升级审查 开始 之前,继续。

注意

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

执行逻辑升级:

  1. 查看第2.11.1.1节“影响升级到MySQL 5.7的更改”中所述的更改,以便在 升级之前执行的步骤。

  2. 从以前的MySQL版本导出您现有的数据:

    mysqldump -u root -p  --add-drop-table --routines --events  --all-databases --force > data-for-upgrade.sql
    注意

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

    重要

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

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

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

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

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

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

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

    mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir
  7. 重置root密码:

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

    mysql -u root -p --force < data-for-upgrade.sql
  9. 运行mysql_upgrade例如:

    mysql_upgrade -u root -p

    mysql_upgrade检查所有数据库中的所有表与当前版本的MySQL不兼容。mysql_upgrade还升级 mysql系统数据库,以便您可以利用新的特权或功能。

    注意

    当服务器运行时,不应使用 mysql_upgrade--gtid-mode=ON有关详细信息,请参阅 GTID模式和mysql_upgrade。

    mysql_upgrade不会升级帮助表的内容。有关升级说明,请参见 第5.1.10节“服务器端帮助”

  10. 关闭并重新启动MySQL服务器,以确保对系统表进行的任何更改生效。例如:

    mysqladmin -u root -p shutdownmysqld_safe --user=mysql --datadir=/path/to/5.7-datadir

升级疑难解答

  • 如果出现问题,例如新的 mysqld服务器无法启动,请确认您以前没有安装旧的my.cnf文件。您可以使用该--print-defaults选项检查 (例如,mysqld --print-defaults)。如果此命令显示除程序名称以外的任何内容,则会有一个my.cnf影响服务器或客户端操作的活动文件。

  • 如果升级后遇到编译客户端程序(例如Commands out of sync或意外的核心转储)的问题,则可能在编译程序时使用旧的头文件或库文件。在这种情况下,请检查您的mysql.h文件和 libmysqlclient.a的日期, 以验证它们是否来自新的MySQL发行版。如果没有,请使用新的标头和库重新编译程序。如果库主版本号已更改(例如从libmysqlclient.so.15到 libmysqlclient.so.16,则针对共享客户端库编译的程序也可能需要重新编译 

  • 如果您已经创建了具有给定名称的用户定义函数(UDF),并将MySQL升级到实现具有相同名称的新内置函数的版本,则UDF将无法访问。要纠正这一点,可以使用DROP FUNCTIONUDF删除,然后用 CREATE FUNCTION不同的非冲突名称重新创建UDF。如果新版本的MySQL实现了与现有存储函数同名的内置函数,则也是如此。有关描述服务器如何解释对不同类型函数的引用的规则请参见 第9.2.4节“功能名称解析和解析”