本节介绍如何在 Unix/Linux 上升级 MySQL 二进制和基于包的安装。描述了就地和逻辑升级方法。
就地升级涉及关闭旧的 MySQL 服务器,用新的替换旧的 MySQL 二进制文件或包,在现有数据目录上重新启动 MySQL,以及升级现有安装中需要升级的任何剩余部分。
如果您升级最初通过安装多个 RPM 包生成的安装,请升级所有包,而不仅仅是部分包。例如,如果您之前安装了服务器和客户端 RPM,请不要只升级服务器 RPM。
对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括用于管理 MySQL 服务器启动和关闭的 systemd 支持。在这些平台上, 未安装mysqld_safe 。在这种情况下,请使用 systemd 来启动和关闭服务器,而不是以下说明中使用的方法。请参阅 第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”。
要执行就地升级:
如果将 XA 事务与 一起使用
InnoDB
,请在升级前运行XA RECOVER
以检查未提交的 XA 事务。如果返回结果,则通过发出XA COMMIT
orXA ROLLBACK
语句提交或回滚 XA 事务。将 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 二进制分发包。请参阅 获取和解压分发。对于基于包的安装,请安装新包。
使用现有数据目录启动 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不升级时区表或帮助表的内容。有关升级说明,请参阅 第 5.1.13 节,“MySQL 服务器时区支持”和 第 5.1.14 节,“服务器端帮助支持”。
关闭并重新启动 MySQL 服务器以确保对系统表所做的任何更改生效。例如:
mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
逻辑升级涉及使用备份或导出实用程序(如 mysqldump或mysqlpump )从旧 MySQL 实例导出 SQL ,安装新的 MySQL 服务器,并将 SQL 应用到新的 MySQL 实例。
对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括用于管理 MySQL 服务器启动和关闭的 systemd 支持。在这些平台上, 未安装mysqld_safe 。在这种情况下,请使用 systemd 来启动和关闭服务器,而不是以下说明中使用的方法。请参阅 第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”。
要执行逻辑升级:
查看 第 2.11.1 节“开始之前”中的信息。
从以前的 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
密码:$> 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
笔记gtid_mode=ON
如果您的转储文件包含系统表, 则不建议在服务器 ( ) 上启用 GTID 时加载转储文件。mysqldump为使用非事务性 MyISAM 存储引擎的系统表发出 DML 指令,并且在启用 GTID 时不允许这种组合。另请注意,将转储文件从启用了 GTID 的服务器加载到另一台启用了 GTID 的服务器中,会导致生成不同的事务标识符。运行mysql_upgrade。例如:
mysql_upgrade -u root -p
mysql_upgrade检查所有数据库中的所有表是否与当前版本的 MySQL 不兼容。mysql_upgrade还会升级
mysql
系统数据库,以便您可以利用新的特权或功能。笔记mysql_upgrade不升级时区表或帮助表的内容。有关升级说明,请参阅 第 5.1.13 节,“MySQL 服务器时区支持”和 第 5.1.14 节,“服务器端帮助支持”。
关闭并重新启动 MySQL 服务器以确保对系统表所做的任何更改生效。例如:
mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir &