MySQL 升级到8.4版本的详细指南

本指南详细介绍了将 MySQL 升级到 8.4 版本的完整流程、注意事项和操作方法。

一、升级前准备 (3.1 Before You Begin)

在开始升级之前,必须仔细审阅本节信息并执行所有推荐的操作:

  1. 理解升级过程:了解升级期间可能发生的情况。请参阅第 3.4 节“MySQL 升级过程升级的内容”。

  2. 备份数据:创建完整的数据库备份以保护您的数据。此备份必须包含 mysql 系统数据库,该数据库存储了 MySQL 数据字典表和其他系统表。

    重要提示:

    • 不支持从 MySQL 8.4 降级到 MySQL 8.3,或从一个 MySQL 8.4 版本降级到更早的 MySQL 8.4 版本。
    • 唯一支持的降级替代方案是恢复升级前创建的备份
    • 因此,在启动升级过程之前备份数据是绝对必要的
  3. 检查升级路径:审阅第 3.2 节“升级路径”,确保您计划的升级路径是受支持的。

  4. 审阅变更:审阅第 3.5 节“MySQL 8.4 中的变更”,了解升级前需要注意的变更。某些变更可能需要您采取行动。

  5. 审阅废弃和移除功能:审阅第 1.4 节“自 MySQL 8.0 以来 MySQL 8.4 的新变化”中关于废弃和移除功能的信息。如果您使用了这些功能中的任何一项,升级可能需要相应更改。

  6. 审阅配置变量变更:审阅第 1.5 节“自 8.0 以来 MySQL 8.4 中新增、废弃或移除的服务器和状态变量及选项”。如果您使用了废弃或已移除的变量,升级可能需要更改配置。

  7. 查阅发行说明:查阅 MySQL 8.4 的发行说明,了解修复、变更和新功能信息。

  8. 复制环境:如果使用了复制,审阅第 19.5.3 节“升级或降级复制拓扑”。

  9. 遵循最佳实践:审阅第 3.3 节“升级最佳实践”并相应地进行规划。

二、升级路径 (3.2 Upgrade Paths)

注意:

  • 在尝试降级之前,请确保了解 MySQL 长期支持 (LTS) 和创新版本的发布模型。
  • 建议在执行升级之前,使用 MySQL Shell 的升级检查器工具 (util.checkForServerUpgrade()) 检查升级兼容性。
  • 复制拓扑的升级遵循第 19.5.3 节“升级或降级复制拓扑”中描述的滚动升级方案,该方案使用支持的单一服务器升级方法之一来升级每个单独的服务器。
  • 月度快速更新 (MRU) 和热修复在此文档中也视为发布。

表:MySQL 服务器的升级路径

升级路径路径示例支持的升级方法
在同一个 LTS 或 Bugfix 系列内8.0.37 到 8.0.41 或 8.4.0 到 8.4.4原地升级、逻辑导出导入、复制、MySQL 克隆
从 LTS/Bugfix 系列到下一个 LTS 系列8.0.37 到 8.4.x LTS原地升级、逻辑导出导入、复制
从 LTS/Bugfix 到下一个 LTS 系列之前的创新版8.0.34 到 8.3.0 或 8.4.0 到 9.0.0原地升级、逻辑导出导入、复制
从创新系列到下一个 LTS 系列8.3.0 到 8.4 LTS原地升级、逻辑导出导入、复制
从创新系列到下一个 LTS 系列之后的创新版不允许需要两步:8.3.0 到 8.4 LTS,然后 8.4 LTS 到 9.x 创新版
在同一个创新系列内8.1.0 到 8.3.0原地升级、逻辑导出导入、复制
从 MySQL 5.7 到 LTS 或创新版MySQL 5.7 到 8.4不能跳过 Bugfix 或 LTS 系列。例如,需先将 MySQL 5.7 升级到 MySQL 8.0,再将 MySQL 8.0 升级到 MySQL 8.4。

三、升级最佳实践 (3.3 Upgrade Best Practices)

MySQL 支持在次要版本之间(LTS 系列内)升级和跨主版本(跨 LTS 系列)升级。升级可提供最新的功能、性能和安全性修复。

为确保成功升级到最新的 MySQL 8.4 版本,我们推荐以下最佳实践:

  1. 决定升级的主版本或次版本
    • 了解 MySQL 发布模型中 LTS(长期支持)和创新版本的区别。LTS 版本提供 8 年以上的支持,适用于生产环境。创新版本为用户提供最新的功能和能力。
    • 次要版本升级通常较简单,而主版本升级需要战略规划和额外的升级前测试。本指南对主版本升级尤其有用。
  2. 决定升级类型
    • 原地升级 (In-place):替换 MySQL 服务器软件包。
    • 逻辑升级 (Logical):将 SQL 从旧的 MySQL 实例导出并导入到新的实例。
    • 复制拓扑升级 (Replication):考虑每个服务器在拓扑中的角色。
  3. 审查支持的平台
    • 如果您的当前操作系统不被新版本的 MySQL 支持,则计划升级操作系统,否则不支持原地升级。
    • 查看当前支持的平台列表:https://www.mysql.com/support/supportedplatforms/database.html
  4. 了解 MySQL 服务器变更
    • 每个主版本都会带来新功能、行为变更、废弃项和移除项。了解这些变更对现有应用的影响至关重要。
    • 参阅:第 3.5 节 “MySQL 8.4 中的变更”。
  5. 运行升级检查器并修复不兼容问题
    • 使用 MySQL Shell 的升级检查器工具 (util.checkForServerUpgrade()) 检测数据库版本之间必须解决的升级前不兼容问题。
    • 连接到现有的 MySQL 服务器,并选择计划升级到的目标 MySQL 服务器版本。该工具将报告升级前需要解决的问题(例如数据类型、存储引擎等的不兼容性)。
    • 当升级检查器不再报告任何问题时,您已准备好升级。
  6. 在测试环境中运行应用程序
    • 完成升级检查器的要求后,下一步在目标 MySQL 服务器上测试您的应用程序。
    • 检查 MySQL 错误日志和应用程序日志中的错误和警告。
  7. 对应用程序和工作负载进行基准测试
    • 建议通过比较应用程序和工作负载在 MySQL 新旧版本上的性能表现来进行基准测试。通常,较新的 MySQL 版本会增加功能并提高性能,但在某些情况下,特定查询在升级后可能会变慢。
    • 可能导致性能下降的原因包括:
      • 先前的服务器配置对新版本不是最优的
      • 数据类型变更
      • 多字节字符集支持需要更多存储空间
      • 存储引擎变更
      • 索引被删除或更改
      • 更强的加密
      • 更强的认证
      • SQL 优化器变更
      • 新版本的 MySQL 需要更多内存
      • 物理或虚拟硬件变慢(计算或存储)
    • 有关信息及可能的缓解技术,请参阅 验证性能下降。
  8. 并行运行新旧 MySQL 版本
    • 为最小化风险,最好在运行升级系统的同时保持当前系统运行(并行运行)。
  9. 进行最终的测试升级
    • 在升级生产系统之前,进行练习和全面测试升级流程。
  10. 检查 MySQL 备份
    • 在执行升级之前,确认存在完整的备份并且可用。
  11. 升级生产服务器
    • 完成上述步骤后,即可进行生产环境升级。
  12. 企业支持
    • 如果您是 MySQL 企业版客户,还可以联系 MySQL 支持团队专家咨询任何问题。

四、MySQL 升级过程升级的内容 (3.4 What the MySQL Upgrade Process Upgrades)

安装新版本的 MySQL 可能需要升级现有安装的以下部分:

  1. mysql 系统模式:包含存储 MySQL 服务器运行时所需信息的表(参见第 7.3 节 “mysql 系统模式”)。mysql 模式表分为两大类:
    • 数据字典表:存储数据库对象元数据。
    • 系统表(即剩余的非数据字典表):用于其他操作目的。
  2. 其他模式:包括一些内置的、可视为服务器“拥有”的模式,以及其他用户模式:
    • performance_schemaINFORMATION_SCHEMAndbinfosys 模式。
    • 用户模式。

有两个不同的版本号与可能需要升级的部分相关联:

  • 数据字典版本:适用于数据字典表。
  • 服务器版本(又称 MySQL 版本):适用于系统表和其他模式中的对象。

升级过程发生在两个步骤:

  1. 步骤 1:数据字典升级
    • 升级 mysql 模式中的数据字典表、Performance Schema、INFORMATION_SCHEMAndbinfo
    • 由服务器在启动时自动执行(除非使用 --upgrade=NONE 选项禁止)。
    • 如果数据字典过期但被禁止升级,服务器将无法启动并报错退出。
    • 使用 --upgrade 服务器选项控制自动升级行为:
      • --upgrade=AUTO (或无选项):升级所有过期的内容(步骤 1 和 2)。
      • --upgrade=NONE:不升级任何内容,但如果数据字典必须升级则退出报错。
      • --upgrade=MINIMAL:仅升级数据字典、Performance Schema 和 INFORMATION_SCHEMA(步骤 1)。注意:此选项后无法启动组复制,且其他功能可能受限。
      • --upgrade=FORCE:升级步骤 1 的内容,并强制升级其他所有内容(步骤 2)。启动时间可能较长。
  2. 步骤 2:服务器升级
    • 升级 mysql 模式中的系统表(剩余的非数据字典表)、sys 模式和用户模式。
    • 安装或升级 sys 模式(如果存在同名用户模式会报错)。
    • 将系统表升级到当前结构(包括帮助表,不包括时区表)。
    • 更改 mysql.db, mysql.tables_priv, mysql.columns_priv, mysql.procs_priv 表主键列顺序以提升性能(对拥有大量用户和权限的系统可能耗时)。
    • 使用 CHECK TABLE ... FOR UPGRADE 检查并处理所有用户模式中的所有表(可能耗时且锁表)。
    • 将所有检查和修复过的表标记为当前的 MySQL 版本号。
    • 注意:升级过程不会升级时区表的内容。升级时区表需手动操作,参见第 7.1.15 节 “MySQL 服务器时区支持”。

五、MySQL 8.4 中的变更 (3.5 Changes in MySQL 8.4)

在升级到 MySQL 8.4 之前,请审阅以下部分描述的变更,以识别适用于您当前 MySQL 安装和应用程序的变更:

  1. MySQL 8.4 中的不兼容变更

    • 空间索引:升级到 MySQL 8.4.4 或更高版本时,建议在升级前删除所有空间索引,升级完成后再重新创建它们。或者,您也可以在升级后立即(但在使用包含这些索引的表之前)删除并重新创建此类索引。更多信息参见第 13.4.10 节 “创建空间索引”。
    • 移除 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() 函数:MySQL 8.0 中已废弃的 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() SQL 函数在 8.4 中已移除;尝试调用它现在会导致语法错误。请改用 WAIT_FOR_EXECUTED_GTID_SET()
    • authentication_fidoauthentication_fido_client 在某些平台上不再可用:由于服务器捆绑的 libfido2 库升级到需要 OpenSSL 1.1.1 或更高版本的 1.13.0,authentication_fidoauthentication_fido_client 认证插件在 Enterprise Linux 6, Enterprise Linux 7, Solaris 11 或 SUSE Enterprise Linux 12 上不再可用。
    • 命令行选项禁止设置为 NULL:在命令行上将服务器变量设置为 SQL NULL 是不支持的。在 MySQL 8.4 中,明确禁止将任何此类变量设置为 NULL,尝试这样做将被拒绝并报错。特定变量(如 basedir, datadir, plugin_dir 等)除外。参见第 7.1.8 节 “服务器系统变量”。
    • 更多变更信息请参阅第 1.4 节 “自 MySQL 8.0 以来 MySQL 8.4 的新变化”。
  2. 变更的服务器默认值

    • 下表列出了 MySQL 8.4 与 MySQL 8.0 相比,系统变量默认值发生变化的项目。虽然新默认值适用于大多数用例,但在特定场景或需要兼容旧配置时可能需要调整。
    分类系统变量旧默认值新默认值
    InnoDB 变更innodb_adaptive_hash_indexONOFF
    innodb_buffer_pool_in_core_fileONOFF
    innodb_buffer_pool_instancesinnodb_buffer_pool_size < 1GB: 1; 否则: 8innodb_buffer_pool_size <= 1GB: 1; 否则: MIN( 0.5 * (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size), 0.25 * number_of_cpus)
    innodb_change_bufferingallnone
    innodb_doublewrite_filesinnodb_buffer_pool_instances * 22
    innodb_doublewrite_pagesinnodb_write_io_threads 的值128
    innodb_flush_methodfsync支持则 O_DIRECT,否则 fsync
    innodb_io_capacity20010000
    innodb_io_capacity_maxMIN(2 * innodb_io_capacity, 2000)2 * innodb_io_capacity
    innodb_log_buffer_size16777216 (16MB)67108864 (64MB)
    innodb_numa_interleaveOFFON
    innodb_page_cleaners4innodb_buffer_pool_instances 的值
    innodb_parallel_read_threads4MIN(number_of_cpus / 8, 4)
    innodb_purge_threads4如果 number_of_cpus <= 16: 1; 否则: 4
    innodb_use_fdatasyncOFFON
    组复制变更group_replication_consistencyEVENTUALBEFORE_ON_PRIMARY_FAILOVER
    group_replication_exit_state_actionREAD_ONLYOFFLINE_MODE
    临时表变更temptable_max_mmap1073741824 (1GB)0
    temptable_max_ram1073741824 (1GB)总内存的 3% (范围 1-4 GB)
    temptable_use_mmapONOFF
    • 有关 MySQL 8.4 中新增的选项或变量,请参阅 MySQL 服务器版本参考中的“MySQL 8.4 的选项和变量变更”。
    • 性能模式 variables_info 表显示了每个系统变量的设置来源及其取值范围。

六、准备安装进行升级 (3.6 Preparing Your Installation for Upgrade)

在升级到最新的 MySQL 8.4 版本之前,通过执行以下初步检查,确保您当前的 MySQL 8.3 或 MySQL 8.4 服务器实例已做好升级准备:

提示: 考虑使用 MySQL Shell 升级检查器工具 (util.checkForServerUpgrade()) 来验证 MySQL 服务器实例是否已准备好升级。您可以指定计划升级到的目标 MySQL 服务器版本(从 MySQL Server 8.0.11 到与当前 MySQL Shell 版本号匹配的 MySQL Server 版本号)。该工具执行与指定目标版本相关的自动检查,并建议您应手动进行的其他相关检查。升级检查器适用于 MySQL 的所有 Bugfix、Innovation 和 LTS 版本。MySQL Shell 安装说明请参阅 此处。

初步检查(必须不存在以下问题):

  1. 运行升级兼容性检查
    mysqlcheck -u root -p --all-databases --check-upgrade
    
    如果 mysqlcheck 报告任何错误,请纠正这些问题。具体包括:
    • 没有使用废弃数据类型或函数的表。
    • 没有孤立的 .frm 文件。
    • 触发器没有缺失或空的定义者 (DEFINER) 或无效的创建上下文(由 SHOW TRIGGERSINFORMATION_SCHEMA.TRIGGERS 表中的 character_set_client, collation_connection, Database Collation 属性指示)。任何此类触发器必须导出并重新导入以修复问题。
  2. 检查不支持分区的存储引擎
    SELECT TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE ENGINE NOT IN ('innodb', 'ndbcluster')AND CREATE_OPTIONS LIKE '%partitioned%';
    
    查询报告的任何表必须更改为使用 InnoDB 或使其变为非分区表:
    • 更改存储引擎:ALTER TABLE table_name ENGINE = INNODB; (参见第 17.6.1.5 节 “将表从 MyISAM 转换到 InnoDB”)。
    • 移除分区:ALTER TABLE table_name REMOVE PARTITIONING;
  3. 检查保留关键字冲突:MySQL 8.4 中的一些新保留关键字可能使之前用作标识符的词变得非法。修复方法是使用反引号 ` 引用标识符。参见第 11.2 节 “模式对象名称” 和第 11.3 节 “关键字和保留词”。
  4. 检查与数据字典表冲突的用户表
    SELECT TABLE_SCHEMA, TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERELOWER(TABLE_SCHEMA) = 'mysql'ANDLOWER(TABLE_NAME) IN('catalogs', 'character_sets', 'check_constraints', 'collations', 'column_statistics','column_type_elements', 'columns', 'dd_properties', 'events', 'foreign_key_column_usage','foreign_keys', 'index_column_usage', 'index_partitions', 'index_stats', 'indexes','parameter_type_elements', 'parameters', 'resource_groups', 'routines', 'schemata','st_spatial_reference_systems', 'table_partition_values', 'table_partitions', 'table_stats','tables', 'tablespace_files', 'tablespaces', 'triggers', 'view_routine_usage', 'view_table_usage');
    
    查询报告的任何表必须删除或重命名 (RENAME TABLE)。这也可能需要更改使用这些受影响表的应用程序。
  5. 检查过长的外键约束名 (超过 64 字符):
    SELECT TABLE_SCHEMA, TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME IN(SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1)FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGNWHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);
    
    对于约束名超过 64 字符的表,删除该约束并使用不超过 64 字符的约束名重新添加 (ALTER TABLE ... DROP FOREIGN KEY ..., ADD CONSTRAINT ... FOREIGN KEY ...)。
  6. 检查 SQL 模式sql_mode 系统变量中不能定义已废弃的 SQL 模式。尝试使用已废弃的 SQL 模式会阻止 MySQL 8.4 启动。应修改使用已废弃 SQL 模式的应用程序以避免它们。参见服务器变更中移除的 SQL 模式。
  7. 确保正常关机:仅升级已正确关闭的 MySQL 服务器实例。如果实例意外关闭,请重启该实例并使用 innodb_fast_shutdown=0 关闭它后再进行升级。
  8. 检查视图列名长度:不能有显式定义列名超过 64 字符的视图(MySQL 5.7 允许最多 255 字符)。为避免升级错误,应在升级前修改此类视图。识别方法:使用 SHOW CREATE VIEW 或查询 INFORMATION_SCHEMA.VIEWS 表检查视图定义。
  9. 检查 ENUM/SET 元素长度:不能有单个 ENUMSET 列元素超过 255 字符或 1020 字节长度的表或存储过程。在 MySQL 8.4 之前,ENUMSET 列元素的最大组合长度为 64K。在 MySQL 8.4 中,单个 ENUMSET 列元素的最大字符长度为 255,最大字节长度为 1020(支持多字节字符集)。在升级到 MySQL 8.4 之前,修改任何超出新限制的 ENUMSET 列元素。否则会导致升级失败。
  10. 移除废弃功能:您的 MySQL 8.3 安装不能使用 MySQL 8.4 不支持的功能。例如:
    • 审阅 MySQL 8.4 中移除的功能和已移除的服务器启动选项及系统变量(参见第 1.5 节)。如果使用了其中任何一项,升级需要更改配置。
  11. lower_case_table_names 变更注意事项
    • 如果您打算在升级时将 lower_case_table_names 设置更改为 1,请确保在升级前模式和表名都是小写的。否则,由于模式或表名字母大小写不匹配,可能会导致失败。
    • 使用以下查询检查包含大写字符的模式和表名:
      SELECT TABLE_SCHEMA, TABLE_NAME
      FROM information_schema.tables
      WHERE TABLE_NAME COLLATE utf8mb4_bin <> LOWER(TABLE_NAME) COLLATE utf8mb4_bin;
      
    • 注意:不建议在升级时更改 lower_case_table_names 设置。如果 lower_case_table_names=1,升级过程会检查表和模式名是否全为小写字符。如果发现包含大写字符的表或模式名,升级过程将因错误而失败。

升级失败处理:
如果升级到 MySQL 8.4 因上述任何问题失败,服务器将回滚对数据目录的所有更改。在这种情况下,应删除所有重做日志文件 (ib_logfile*),在现有数据目录上重新启动 MySQL 8.3 服务器以解决错误。修复错误后,执行慢速关闭 (innodb_fast_shutdown=0),然后再次尝试升级。

七、Unix/Linux 上基于二进制或软件包的安装升级 (3.7)

升级方法取决于平台和初始安装方式:

1. 原地升级 (In-Place Upgrade)

原地升级涉及关闭旧服务器,用新的二进制文件或软件包替换旧的,然后在现有数据目录上重启新服务器。

步骤:

  1. 审阅第 3.1 节信息。
  2. 按照第 3.6 节完成安装准备检查。
  3. XA 事务:如果使用 InnoDB 的 XA 事务,升级前运行 XA RECOVER 检查未提交的 XA 事务。如果有结果,使用 XA COMMITXA ROLLBACK 提交或回滚这些事务。
  4. 关机设置:如果通常配置 innodb_fast_shutdown=2 (冷关机),请配置为执行快速或慢速关机:
    SET GLOBAL innodb_fast_shutdown = 1; -- 快速关机
    SET GLOBAL innodb_fast_shutdown = 0; -- 慢速关机 (推荐用于跨版本升级)
    
  5. 关闭旧服务器
    mysqladmin -u root -p shutdown
    
  6. 升级 MySQL 二进制文件或软件包
    • 二进制安装:解压新的 MySQL 二进制分发包 (参见 获取并解压分发版)。
    • 软件包安装:安装新软件包 (注意:如果最初安装了多个 RPM 包,需升级所有包,而不仅仅是服务器包)。对于 Yum/APT/SLES 仓库安装,请使用相应的包管理器命令 (如 sudo yum update mysql-server, sudo apt-get install mysql-server)。
    • 注意:对于使用 systemd 的平台 (RPM/Debian 包安装),使用 systemctl 管理服务 (systemctl stop mysqld, systemctl start mysqld),而不是 mysqld_safe
  7. 启动 MySQL 8.4 服务器 (使用现有数据目录):
    mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
    # 或者对于 systemd 系统
    sudo systemctl start mysqld
    
    • 如果有加密的 InnoDB 表空间,使用 --early-plugin-load 选项加载密钥环插件。
  8. 自动升级
    • 服务器启动时自动检测数据字典表是否存在。如果不存在,则在数据目录中创建它们,用元数据填充,然后继续正常启动序列。
    • 此过程升级所有数据库对象的元数据(数据库、表空间、系统和用户表、视图、存储程序)并移除以前用于元数据存储的文件(如 .frm 文件)。
    • 失败处理:如果此步骤失败,服务器回滚更改。需删除重做日志文件,重启旧版服务器修复错误,慢速关机后重试升级。
    • 此步骤还根据需要升级 mysql 系统数据库,更新 Performance Schema、INFORMATION_SCHEMAsys 数据库,并检查所有用户数据库与当前 MySQL 版本的兼容性。
    • 注意:此过程不会升级时区表。升级时区表需手动操作,参见第 7.1.15 节。

2. 逻辑升级 (Logical Upgrade)

逻辑升级涉及使用 mysqldump 等工具从旧实例导出 SQL,安装新服务器,然后将 SQL 导入到新实例。

步骤:

  1. 审阅第 3.1 节信息。
  2. 从旧安装导出数据
    mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql
    
    重要提示: 如果表包含生成列,请使用 MySQL 5.7.9 或更高版本附带的 mysqldump。可以使用 INFORMATION_SCHEMA.COLUMNS 表识别带有生成列的表。
  3. 关闭旧服务器
    mysqladmin -u root -p shutdown
    
  4. 安装 MySQL 8.4:参见第 2 章 “安装 MySQL”。
  5. 初始化新数据目录
    mysqld --initialize --datadir=/path/to/8.4-datadir
    
    记下屏幕上显示或写入错误日志的临时 ‘root’@‘localhost’ 密码。
  6. 启动 MySQL 8.4 服务器 (使用新数据目录):
    mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir &
    # 或者对于 systemd 系统
    sudo systemctl start mysqld
    
  7. 重置 root 密码
    mysql -u root -p
    Enter password: ****  <- 输入临时 root 密码
    mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
    
  8. 将导出的 SQL 导入新服务器
    mysql -u root -p --force < data-for-upgrade.sql
    
    注意:如果启用了 GTID (gtid_mode=ON) 且转储文件包含系统表,不建议加载转储文件。mysqldump 为非事务性的 MyISAM 系统表发出 DML 指令,这在启用 GTID 时是不允许的。另外,将启用 GTID 的服务器转储加载到另一个启用 GTID 的服务器会生成不同的事务 ID。
  9. 执行剩余升级操作
    • 关闭服务器,然后使用 --upgrade=FORCE 选项重启以执行剩余的升级任务:
    mysqladmin -u root -p shutdown
    mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE &
    # 或者对于 systemd 系统 (需在配置文件中设置 upgrade=FORCE 或命令行传递)
    sudo systemctl stop mysqld
    sudo mysqld --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE &
    
    • 使用 --upgrade=FORCE 重启会强制进行步骤 2 的升级任务(升级系统表、sys 模式、检查用户模式中的所有对象)。
    • 注意:此过程不会升级时区表。

3. MySQL 集群升级 (MySQL Cluster Upgrade)

MySQL 集群升级遵循常规滚动升级方案 (MGM 节点 -> 数据节点 -> API 节点/MySQL 服务器)。升级每个 mysqld 有两个步骤:

  1. 导入数据字典:使用 --upgrade=MINIMAL 选项启动新的 mysqld 以升级数据字典但不升级系统表。服务器必须能连接到 NDB 集群才能完成此阶段。
  2. 升级系统表:不使用 --upgrade=MINIMAL 选项重启每个 mysqld

八、使用 MySQL Yum 仓库升级 (3.8)

适用于支持的 Yum-based 平台 (参见第 2.5.1 节)。

  1. 选择目标系列
    • 默认情况下,MySQL Yum 仓库会将 MySQL 更新到您安装时选择的发布轨道中的最新版本(例如,8.0.x 安装不会自动更新到 8.4.x)。
    • 要更新到另一个发布系列,必须首先禁用当前选定的子仓库,并为目标系列启用子仓库。编辑 /etc/yum.repos.d/mysql-community.repo 文件中的子仓库条目。
    • 一般规则:从一个 Bugfix 系列升级到另一个时,应升级到下一个 Bugfix 系列,而不是跳过一个。例如,从 MySQL 5.7 升级到 8.4,应先升级到 MySQL 8.0,再升级到 8.4。
    • MySQL Yum 仓库不支持原地降级。降级请参见第 4 章。
  2. 升级 MySQL
    sudo yum update mysql-server   # 非 dnf 系统
    sudo dnf upgrade mysql-server  # dnf 系统
    # 或者更新整个系统
    sudo yum update               # 非 dnf 系统
    sudo dnf upgrade              # dnf 系统
    # 升级特定组件 (先列出:`sudo yum list installed | grep "^mysql"`)
    sudo yum update package-name  # 非 dnf 系统
    sudo dnf upgrade package-name # dnf 系统
    
    注意:MySQL 服务器在通过 Yum 更新后总是会重启。
  3. 升级共享客户端库
    • 使用旧的共享客户端库编译的应用程序在更新后应继续工作。
    • 如果重新编译应用程序并动态链接到更新后的库,则需要在部署这些应用程序的系统上也部署 MySQL 提供的新共享库包。为此,请在这些系统上添加 MySQL Yum 仓库并安装最新的共享库。

九、使用 MySQL APT 仓库升级 (3.9)

在 Debian 和 Ubuntu 平台上,使用 MySQL APT 仓库执行原地升级。具体步骤参见 使用 MySQL APT 仓库升级 MySQL。

十、使用 MySQL SLES 仓库升级 (3.10)

在 SUSE Linux Enterprise Server (SLES) 平台上,使用 MySQL SLES 仓库执行原地升级。具体步骤参见 使用 MySQL SLES 仓库升级 MySQL。

十一、在 Windows 上升级 (3.11)

升级方法取决于现有安装方式:

1. 使用 MSI 安装程序升级

  1. 下载并执行最新的 MySQL Server MSI。
  2. 虽然不支持直接跨系列升级,但“自定义安装”选项允许指定安装位置(否则默认安装到 C:\Program Files\MySQL\MySQL Server 8.4\)。
  3. 运行捆绑的 MySQL 配置器 (MySQL Configurator) 来配置新安装。

参考链接:https://dev.mysql.com/doc/refman/8.4/en/upgrading.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912829.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode427.建立四叉树

区间x0到x1和区间y0到y1都是左闭右开的 解题基本思路是先判断当前矩阵是不是全0或全1&#xff0c;如果是就直接返回新建的一个节点值(矩阵的统一值&#xff0c;叶子节点&#xff09;,如果不是那就新建一个节点值&#xff0c;非叶并且左上右上左下右下四个方向上递归创建节点 /…

医学+AI教育实践!南医大探索数据挖掘人才培养,清华指导发布AI教育白皮书

教育数字化浪潮正以前所未有的力度重塑高等教育格局。今年4月&#xff0c;为贯彻落实《教育强国建设规划纲要&#xff08;2024—2035 年&#xff09;》&#xff0c;教育部等九部门印发《关于加快推进教育数字化的意见》&#xff0c;表明将持续推动“人工智能教育”全方位发展&a…

PDF处理控件Spire.PDF系列教程:如何使用C# 拆分 PDF 文件(完整指南)

PDF文件因其高度的跨平台兼容性和安全稳定的格式特点&#xff0c;广泛应用于企业文档管理和电子资料传输中。随着PDF文档页数和内容复杂度的增加&#xff0c;拆分PDF成为优化文档处理流程、提升办公效率的重要需求。通过编程方式实现PDF拆分&#xff0c;不仅能自动化处理海量文…

文心4.5开源模型部署实践

文心4.5开源模型部署实践 使用fastdeploy本地部署 执行命令&#xff1a; python -m fastdeploy.entrypoints.openai.api_server \--model baidu/ERNIE-4.5-21B-A3B-Paddle \--port 8180 \--metrics-port 8181 \--engine-worker-queue-port 8182 \--max-model-len 32768 \--m…

Python迭代器、生成器、闭包和装饰器(三器一包)

return、continue、break区别&#xff1a; return只能用在函数里面&#xff0c;表示从函数中返回&#xff0c;函数体内的后续任何代码都不执行continue只是跳出当前循环&#xff0c;进入下一循环break只是跳出全部循环&#xff0c;如果循环后面还有代码&#xff0c;会进行执行…

【Java】Maven

一.Maven简介 Maven的产生主要是为了解决Java项目中的两个问题&#xff1a; 1.依赖管理&#xff1a; 传统 Java 项目在引入第三方库时&#xff0c;需要手动下载 JAR 包并维护复杂的依赖关系。Maven 提供了统一的依赖管理机制&#xff0c;通过简单的配置即可自动从仓库下载并引…

人脸活体识别3:C/C++实现人脸眨眼 张嘴 点头 摇头识别(可实时检测)

人脸活体识别3&#xff1a;C/C实现人脸眨眼 张嘴 点头 摇头识别(可实时检测) 目录 人脸活体识别3&#xff1a;C/C实现人脸眨眼 张嘴 点头 摇头识别(可实时检测) 1. 前言 2.人脸活体识别方法 &#xff08;1&#xff09;基于人脸动作的检测​​ &#xff08;2&#xff09;​…

【ABAP】 从无到有 新建一个Webdynpro程序

、新建WDA 可从SE80在web dynpro 组件下 创建 并按例以下操作 2、插入窗口 3、相关功能 3-1、展示消息 DATA:lo_api_controller TYPE REF TO if_wd_controller,lo_message_handler TYPE REF TO if_wd_message_manager.lo_api_controller ? wd_this->wd_get_api( ).lo_mess…

ALV常用设置(更新中一)

之前设置了checkbox&#xff0c;但是触发不了单击事件&#xff0c;且alv自带的复选&#xff0c;鼠标移动单击别处就会自动取消。 **增加多选框到fieldcat&#xff0c;**这一点很重要&#xff0c;然后设置 IF gs_fcat-fieldname sel.gs_fcat-checkbox X. gs_fcat-edit X. …

NumPy 或 PyTorch/TensorFlow 中的张量理解

(2, 2, 3) 形状的 3D 数组&#xff08;或张量&#xff09;的结构。 个人理解&#xff1a; 2个2维数组&#xff08;张量&#xff09;&#xff0c;2维数组&#xff08;张量&#xff09;里面有2个1维向量&#xff08;张量&#xff09;&#xff0c;1维向量&#xff08;张量&#x…

Linux环境下使用 C++ 与 OpenCV 实现 ONNX 分类模型推理

实验环境&#xff1a;Ubuntu 20.0 推理模型&#xff1a;ONNX分类模型 1. 安装依赖项 首先是需要安装依赖库&#xff0c;如g&#xff0c;cmake等&#xff0c;如果已经安装的话可以忽略 sudo apt install -y g sudo apt install -y cmake sudo apt install -y make sudo apt i…

AJAX 安装使用教程

一、AJAX 简介 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种在无需重新加载整个网页的情况下&#xff0c;能够与服务器交换数据并更新部分网页内容的技术。它不是一种新语言&#xff0c;而是使用现有的标准组合&#xff1a;JavaScript XMLHttpRequest…

【牛客算法】牛客网编程题解:小红拼图

一、题目介绍 1.1. 题目链接 &#xff1a;小红拼图 https://www.nowcoder.com/questionTerminal/08b54686f0d14bd784d9d148c68a268a 1.2 题目介绍 小红正在玩一个拼图游戏&#xff0c;她有一些完全相同的拼图组件&#xff1a; 小红准备用这些组件来拼成一些图案。这些组件可…

买卖股票的最佳时机--js 算法

一、买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。…

C#基础(WndProc)

WndProc 是操作系统与你的程序“对话”的通道​​。当用户点击鼠标、按下键盘&#xff0c;或系统事件&#xff08;如窗口移动&#xff09;发生时&#xff0c;Windows 会将这些事件打包成“消息”&#xff0c;发送给你的窗口&#xff0c;而 WndProc 就是接收和处理这些消息的函数…

记录一个 Linux中脚本无法执行的问题

问题描述&#xff1a; 在本地的window系统传的云服务器上一个.sh结尾的安装Java环境的脚本 上传到云服务器后&#xff0c;使用命令赋予执行权限 chmod x 文件名然后看一下这个脚本变绿了就可以了 然后开始尝试执行 ./脚本名 然后就报错了 然后开始排查问题 1.检查并修复 She…

Iceberg在图灵落地应用

导读 百度MEG上一代大数据产品存在平台分散、易用性差等问题&#xff0c;导致开发效率低下、学习成本高&#xff0c;业务需求响应迟缓。为了解决这些问题&#xff0c;百度MEG内部开发了图灵3.0生态系统&#xff0c;包括Turing Data Engine(TDE)计算&存储引擎、Turing Data…

FPGA设计的用户约束

FPGA设计的用户约束 文章目录 FPGA设计的用户约束FPGA设计的用户约束综合约束管脚约束位置约束时序约束小总结 FPGA设计的用户约束 至此&#xff0c;HDL到门级网表的转化已经完成&#xff0c;对于编译器来说&#xff0c;下一步的任务就是要将门级网表转换并映射到具体的FPGA硬…

Spring 生态创新应用:微服务架构设计与前沿技术融合实践

在数字化转型的深水区&#xff0c;企业级应用正面临从 “单体架构” 向 “分布式智能架构” 的根本性跃迁。Spring 生态以其二十年技术沉淀形成的生态壁垒&#xff0c;已成为支撑这场变革的核心基础设施。从 2002 年 Rod Johnson 发布《Expert One-on-One J2EE Design and Deve…

车牌识别与标注:基于百度OCR与OpenCV的实现(一)

车牌识别与标注&#xff1a;基于百度OCR与OpenCV的实现 在计算机视觉领域&#xff0c;车牌识别是一项极具实用价值的技术&#xff0c;广泛应用于交通监控、智能停车场管理等领域。本文将介绍如何在macOS系统下&#xff0c;利用百度OCR API进行车牌识别&#xff0c;并结合OpenC…