0

0

mysql升级过程中的数据备份与恢复策略

P粉602998670

P粉602998670

发布时间:2026-01-30 11:16:02

|

204人浏览过

|

来源于php中文网

原创

升级MySQL必须做逻辑备份,禁用物理拷贝;恢复时跳过mysql系统库并初始化;GTID模式需校验gtid_purged;8.0已废弃mysql_upgrade,改由mysqld自动升级;注意默认排序规则变更。

mysql升级过程中的数据备份与恢复策略

升级前必须做完整逻辑备份,而非仅依赖物理拷贝

MySQL 升级(尤其是跨大版本,如 5.7 → 8.0)时,mysqldumpmydumper 生成的逻辑备份是唯一可验证、可移植、兼容性可控的备份方式。直接拷贝 datadir 在多数情况下不可靠:InnoDB 表空间格式可能变更(如 8.0 默认启用 innodb_file_per_table=ON 且引入数据字典表),且 MySQL 8.0 的 mysql 系统库结构与 5.7 不兼容,强行复用会导致启动失败或权限异常。

实操建议:

  • 使用 mysqldump --all-databases --single-transaction --routines --events --triggers --set-gtid-purged=OFF(若未启用 GTID)或 --set-gtid-purged=ON(若已启用 GTID)导出全量数据
  • 避免使用 --skip-lock-tables,它在多事务场景下可能破坏一致性
  • 对大库(>100 GB),优先选用 mydumper 并配合 myloader,支持并行导出/导入,且默认按表粒度加锁,影响更小
  • 务必校验导出文件末尾是否含 EOF 或成功退出码($? 为 0),常见错误如磁盘满、连接中断会导致 dump 截断但无明显报错

升级后恢复时需跳过系统库,手动初始化 mysql 数据库

MySQL 8.0 将原 mysql 库中的权限表(userdb 等)替换为数据字典表(存于 mysql.ibdibdata1 中),且结构完全不向下兼容。若在 8.0 实例中直接导入 5.7 的 mysqldump 全库备份,会因 mysql 库冲突导致恢复失败,甚至损坏新实例的数据字典。

正确做法是分两步:

  • 先用 mysqld --initialize --user=mysql 初始化 8.0 实例,生成全新的 mysql 系统库和 root 密码(记录在 error log 中)
  • 再用 mysql -u root -p 恢复,但必须提前从 backup.sql 中剔除 CREATE DATABASE `mysql` 及其所有 INSERT INTO `mysql`.* 语句;可用 sed '/^CREATE DATABASE `mysql`/,/^\/\*/d' backup.sql > app_backup.sql 快速过滤(注意匹配实际注释结尾)
  • 若备份中含自定义函数/存储过程,需确认其语法兼容性(如 8.0 移除了 DEFINER 的部分宽松校验,可能报 ERROR 1449 (HY000): The user specified as a definer ('xxx'@'%') does not exist),应提前用 SHOW CREATE FUNCTION 检查并重写 DEFINER

GTID 模式下升级必须保持 gtid_mode=ON + enforce_gtid_consistency=ON 且校验 gtid_purged

若原实例启用了 GTID(gtid_mode=ON),升级后若未正确继承 gtid_purged 值,会导致主从复制断裂或新实例拒绝执行任何事务。MySQL 8.0 要求 gtid_modeenforce_gtid_consistency 必须同时为 ON 才允许启动,而 5.7 的 dump 默认不包含 SET @@GLOBAL.GTID_PURGED 语句(除非显式加 --set-gtid-purged=ON)。

NatAgent
NatAgent

AI数据情报监测与分析平台

下载

关键检查点:

  • 导出前确认源库 SELECT @@GLOBAL.gtid_purged; 返回非空值;若为空,需先执行 FLUSH LOGSRESET MASTER(仅限测试环境,生产慎用)
  • dump 文件开头应含类似 SET @@GLOBAL.GTID_PURGED='aaa-bbb-ccc:1-100'; 的语句;若缺失,需手动追加(值来自上一步查询结果)
  • 恢复后立即执行 SELECT @@GLOBAL.gtid_executed, @@GLOBAL.gtid_purged;,确保二者一致且覆盖 dump 中声明的范围,否则后续开启复制会报 Could not execute Write_rows event on table

升级后必须运行 mysql_upgrade 吗?8.0 已废弃该工具

MySQL 5.7 及更早版本要求升级后运行 mysql_upgrade 来更新系统表结构、修复权限视图。但该工具在 MySQL 8.0 中已被彻底移除——所有系统库升级操作由 mysqld 启动时自动完成。若在 8.0 中误执行 mysql_upgrade,会提示 Unknown suffix '.' encountered 或直接报错退出。

替代方案只有两个:

  • 确保以 mysqld --upgrade=FORCE 启动(仅首次启动必需,后续无需重复);该参数会触发内部数据字典升级流程
  • 观察 error log,确认出现类似 Server upgraded from version '50732' to '80033'Created new data dictionary with version ... 的日志条目,即表示升级成功
  • 切勿手动修改 mysql 库下的任何表(如 innodb_index_stats),8.0 的统计信息已转为数据字典内建表,直接 DML 会引发崩溃

最易被忽略的是字符集与排序规则的隐式变更:MySQL 8.0 默认 collation_server=utf8mb4_0900_ai_ci,而 5.7 是 utf8mb4_general_ci。即使备份恢复成功,应用若未显式指定 COLLATE,ORDER BY、GROUP BY 结果可能不同,且 utf8mb4_0900_ai_ci 对某些 emoji 的排序行为也与旧版不一致。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

728

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

328

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

350

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1283

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

360

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

841

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

581

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

423

2024.04.29

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

0

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 815人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号