最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
phpMyAdmin如何迁移MySQL 5.7到MySQL 8.0
时间:2026-08-07 11:26:55 编辑:袖梨 来源:一聚教程网
phpMyAdmin 不是迁移工具,直接导出再导入 MySQL 5.7→8.0 会因 SQL 兼容性断层失败;需手动清理导出文件:替换 DEFAULT CHARSET=utf8 为 utf8mb4、删除 mysql 库 INSERT 语句、修正 CREATE USER 语法、移除 NO_AUTO_CREATE_USER 等不兼容项,并导入前执行 SET NAMES utf8mb4。
phpMyAdmin 本身不是迁移工具,它只是数据库管理界面。直接用它“导出再导入”5.7 → 8.0,大概率失败——不是界面问题,而是底层 SQL 兼容性断层导致的。
phpMyAdmin 导出的 SQL 在 MySQL 8.0 上执行报错
常见错误包括:ERROR 1064 (42000)(语法错误)、ERROR 1292 (HY000)(隐式转换警告升级为错误)、ERROR 1054 (42S22)(Unknown column 'password' in 'field list')。这些都不是 phpMyAdmin 的 bug,而是它默认导出的语句含 5.7 特有结构:
-
CREATE USER语句带PASSWORD子句(8.0 已废弃,改用IDENTIFIED WITH caching_sha2_password BY 'xxx') -
INSERT INTO mysql.user直写password字段(8.0 表结构已改为authentication_string) -
DEFAULT CHARSET=utf8(实际是 utf8mb3,8.0 默认拒绝该声明,需显式写成utf8mb4) -
sql_mode包含NO_AUTO_CREATE_USER(8.0 已移除,导入时直接报错)
用 phpMyAdmin 迁移前必须手动清理导出文件
不能跳过这步。导出后打开 .sql 文件,逐项处理:
- 全局搜索替换:
DEFAULT CHARSET=utf8→DEFAULT CHARSET=utf8mb4(注意:只换建表语句里的,别动注释或数据值) - 删掉所有
INSERT INTO `mysql`.开头的语句(系统库严禁导入) - 把
CREATE USER 'xxx'@'%' IDENTIFIED BY 'xxx';改成:CREATE USER 'xxx'@'%' IDENTIFIED WITH mysql_native_password BY 'xxx';(若应用不支持caching_sha2_password) - 删掉
SET @@sql_mode=开头的整行(尤其含NO_AUTO_CREATE_USER的) - 检查是否有
TYPE=MyISAM,替换成ENGINE=MyISAM(8.0 仍支持 MyISAM,但语法已变)
导入时必须指定字符集和兼容模式
即使改完 SQL,直接在 phpMyAdmin 界面导入仍可能失败。原因:phpMyAdmin 默认用 utf8 连接,而 8.0 要求连接层也用 utf8mb4:
- 登录 phpMyAdmin 后,先执行:
SET NAMES utf8mb4;(在 SQL 窗口运行一次) - 导入页面勾选 “**忽略插入错误**”(否则单条 INSERT 失败会中断整个导入)
- 若提示 “Maximum execution time exceeded”,不要点重试——改用命令行:
mysql -u root -p --default-character-set=utf8mb4 your_db
权限和用户必须单独重建
phpMyAdmin 导出的 SHOW GRANTS 结果无法直接在 8.0 执行。正确做法是:
- 导出用户权限用:
SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user != 'mysql.infoschema';,然后逐条运行结果得到 grant 语句 - 复制这些
GRANT语句,手动改成 8.0 兼容格式(比如去掉WITH GRANT OPTION后面的MAX_QUERIES_PER_HOUR 0等已弃用参数) - 8.0 中创建用户必须显式指定插件:
CREATE USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd'; GRANT SELECT ON db.* TO 'app'@'%';
真正卡住人的地方不在操作步骤多,而在「哪些语句要删、哪些要改、哪些看似无关实则致命」——比如一个没注意到的 password 字段 INSERT,会让整个 mysql.user 表损坏,后续所有用户都登不上。
相关文章
- 燕云十六声不羡仙梦境进入方法 08-07
- 修勾勾是什么梗什么意思-修勾勾梗含义出处介绍 08-07
- 我国启动大模型 IPv6 专项行动:生成式 AI 应用将被要求全面拥抱下一代网络 08-07
- "抱抱脸"向 OpenAI 索赔 1 亿美元算力:智能体失控入侵后,开源社区开出价码 08-07
- 龙族卡塞尔之门懒惰角色详细说明与强度分析 08-07
- 龙族卡塞尔之门懒惰分享 龙族卡塞尔之门懒惰如何 08-07