本节介绍升级或降级MySQL安装的步骤。
升级是一个常见的过程,因为您在同一个MySQL版本系列中获取错误修复或主要MySQL版本之间的重要功能。您可以在某些测试系统上执行此过程,以确保一切顺利进行,然后再在生产系统上执行。
降级较少见。通常,由于生产系统上发生的某些兼容性或性能问题,您撤销升级,并且在测试系统的初始升级验证过程中未发现升级。与升级过程一样,先在一些测试系统上执行并验证降级过程,然后再将其用于生产系统。
本节介绍如何升级到新的MySQL版本。
在下面的讨论中,必须使用具有管理权限的MySQL帐户运行的MySQL 命令包括 在命令行上指定MySQL 用户。需要密码的命令也包括一个 选项。因为后面没有选项值,这样的命令提示输入密码。出现提示时键入密码,然后按Enter键。 -u
root
root
root
-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
模块和PythonMySQLdb
模块。
进行就地升级
如果您升级最初通过安装多个RPM软件包生成的安装,请升级所有软件包,而不只是一些软件包。例如,如果您以前安装了服务器和客户端RPM,请不要仅升级服务器RPM。
对于某些Linux平台,RPM或Debian软件包的MySQL安装包括用于管理MySQL服务器启动和关闭的系统支持。在这些平台上, mysqld_safe的未安装。在这种情况下,请使用systemd进行服务器启动和关闭,而不是以下说明中使用的方法。请参见 第2.5.10节“使用systemd管理MySQL服务器”。
执行就地升级:
-
查看第2.11.1.1节“影响升级到MySQL 5.7的更改”中所述的更改,以便在 升级之前执行的步骤。
-
配置MySQL通过设置
innodb_fast_shutdown
来 执行缓慢的关闭0
。例如:mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"
关闭之前,
InnoDB
执行完全清除和更改缓冲区合并关闭之前,确保数据文件在发布之间文件格式不同的情况下完全准备好。 -
关闭旧的MySQL服务器。例如:
mysqladmin -u root -p shutdown
-
升级MySQL二进制安装或软件包。如果升级二进制安装,请打开新的MySQL二进制发行版软件包。请参阅 获取和解包分发。对于基于软件包的安装,请将旧软件包替换为新软件包。
注意对于受支持的Linux发行版,替代MySQL软件包的首选方法是使用MySQL软件库; 请参见第2.11.1.2节“使用MySQL Yum Repository升级MySQL”, 第2.11.1.3节“使用MySQL APT存储库升级MySQL ”或 使用MySQL SLES存储库升级MySQL以获取说明。
-
启动MySQL 5.7服务器,使用现有的数据目录。例如:
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir
-
运行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节“服务器端帮助”。
-
关闭并重新启动MySQL服务器,以确保对系统表进行的任何更改生效。例如:
mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/existing-datadir
执行逻辑升级
对于某些Linux平台,RPM或Debian软件包的MySQL安装包括用于管理MySQL服务器启动和关闭的系统支持。在这些平台上, mysqld_safe的未安装。在这种情况下,请使用systemd进行服务器启动和关闭,而不是以下说明中使用的方法。请参见 第2.5.10节“使用systemd管理MySQL服务器”。
执行逻辑升级:
-
查看第2.11.1.1节“影响升级到MySQL 5.7的更改”中所述的更改,以便在 升级之前执行的步骤。
-
从以前的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
表来标识具有生成列的表。 -
关闭旧的MySQL服务器。例如:
mysqladmin -u root -p shutdown
-
安装MySQL 5.7。有关安装说明,请参阅第2章安装和升级MySQL。
-
初始化新数据目录,如 第2.10.1节“初始化数据目录”中所述。例如:
mysqld --initialize --datadir=/path/to/5.7-datadir
将显示的临时
'root'@'localhost'
密码复制到您的屏幕上或写入您的错误日志供以后使用。 -
启动MySQL 5.7服务器,使用新的数据目录。例如:
mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir
-
重置
root
密码:shell> mysql -u root -p Enter password: **** <- enter temporary root password mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
-
将以前创建的转储文件加载到新的MySQL服务器中。例如:
mysql -u root -p --force < data-for-upgrade.sql
-
运行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节“服务器端帮助”。
-
关闭并重新启动MySQL服务器,以确保对系统表进行的任何更改生效。例如:
mysqladmin -u root -p shutdown mysqld_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 FUNCTION
UDF删除,然后用CREATE FUNCTION
不同的非冲突名称重新创建UDF。如果新版本的MySQL实现了与现有存储函数同名的内置函数,则也是如此。有关描述服务器如何解释对不同类型函数的引用的规则,请参见 第9.2.4节“功能名称解析和解析”。 -