2.12.4 在 Unix/Linux 上降级基于二进制和软件包的安装
本节介绍如何在 Unix/Linux 上降级 MySQL 二进制和基于软件包的安装。描述了就地和逻辑降级方法。
In-Place Downgrade
就地降级包括关闭新的 MySQL 版本,用旧的 MySQL 二进制文件或软件包替换新的 MySQL 二进制文件或软件包,以及在现有数据目录上重新启动旧的 MySQL 版本。
在同一发行系列中的 GA 版本之间进行降级时,支持就地降级。
MySQL APT,SLES 和 Yum 存储库安装不支持就地降级。
Note
对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysqld_safe。在这种情况下,请使用 systemd 来启动和关闭服务器,而不要使用以下说明中使用的方法。参见第 2.5.10 节“使用 systemdManagementMySQL 服务器”。
要执行就地降级:
-
查看第 2.12.1 节“开始之前”中的信息。
-
如果将 XA 事务与
InnoDB
一起使用,请在降级之前运行XA RECOVER以检查未提交的 XA 事务。如果返回结果,则通过发出XA COMMIT或XA ROLLBACK语句来提交或回滚 XA 事务。 -
通过将innodb_fast_shutdown设置为
0
来配置 MySQL 以执行缓慢关闭。例如:
mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"
在缓慢关闭的情况下,InnoDB
将在关闭之前执行完全清除和更改缓冲区合并,以确保在两个发行版之间的文件格式存在差异时,数据文件已准备就绪。
- 关闭较新的 MySQL 服务器。例如:
mysqladmin -u root -p shutdown
- 缓慢关闭后,请从
data
目录中删除InnoDB
重做日志文件(ib_logfile*
文件),以避免降级与版本之间可能发生的重做日志文件格式更改相关的问题。
rm ib_logfile*
-
通过用较旧的二进制文件或软件包替换较新的二进制文件或软件包,就地降级 MySQL 二进制文件或软件包。
-
使用现有数据目录启动较旧的(降级的)MySQL 服务器。例如:
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir
- 运行mysql_upgrade。例如:
mysql_upgrade -u root -p
mysql_upgrade检查所有数据库中的所有 table 是否与当前版本的 MySQL 不兼容,并在发现问题时尝试修复这些 table。
- 关闭并重新启动 MySQL 服务器,以确保对系统 table 所做的所有更改均生效。例如:
mysqladmin -u root -p shutdown
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir
Logical Downgrade
逻辑降级涉及使用mysqldump从新的 MySQL 版本中转储所有 table,然后将转储文件加载到旧的 MySQL 版本中。
支持逻辑降级,以便在同一发行系列中的各个发行版之间进行降级,以及将其降级到先前的发行版级别。仅支持常规版本(GA)之间的降级。在 continue 之前,请查看第 2.12.1 节“开始之前”。
Note
对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysqld_safe。在这种情况下,请使用 systemd 来启动和关闭服务器,而不要使用以下说明中使用的方法。参见第 2.5.10 节“使用 systemdManagementMySQL 服务器”。
对于 MySQL APT,SLES 和 Yum 存储库安装,仅支持降级到以前的发行版。如果说明要求初始化较旧的实例,请使用软件包 ManagementUtil 删除 MySQL 5.7 软件包并安装 MySQL 5.6 软件包。
要执行逻辑降级:
-
查看第 2.12.1 节“开始之前”中的信息。
-
转储所有数据库。例如:
mysqldump -u root -p
--add-drop-table --routines --events
--all-databases --force > data-for-downgrade.sql
- 关闭较新的 MySQL 服务器。例如:
mysqladmin -u root -p shutdown
- 要初始化 MySQL 5.7 实例,请使用mysqld和--initialize或--initialize-insecure选项。
mysqld --initialize --user=mysql
- 使用新的数据目录启动较旧的 MySQL 服务器。例如:
mysqld_safe --user=mysql --datadir=/path/to/new-datadir
- 将转储文件加载到较旧的 MySQL 服务器中。例如:
mysql -u root -p --force < data-for-upgrade.sql
- 运行mysql_upgrade。例如:
mysql_upgrade -u root -p
mysql_upgrade检查所有数据库中的所有 table 是否与当前版本的 MySQL 不兼容,并在发现问题时尝试修复这些 table。
- 关闭并重新启动 MySQL 服务器,以确保对系统 table 所做的所有更改均生效。例如:
mysqladmin -u root -p shutdown
mysqld_safe --user=mysql --datadir=/path/to/new-datadir