ERROR 1878或Unknown table 'mysql.role_edges'是MySQL 5.7升8.0+后myloader导入常见问题,本质为元数据结构不兼容:8.0新增角色权限表(如role_edges、default_roles),而旧版导出未包含且myloader默认跳过mysql库,导致权限校验失败;需导出时显式包含系统库、确认mydumper≥0.10.0、导入前关闭read_only、加-o强制覆盖,并用8.0的mysql_upgrade --force修复。

Myloader导入报错:ERROR 1878或Unknown table 'mysql.role_edges'
这是MySQL 5.7升到8.0+后用myloader导入常见症状,本质是元数据结构不兼容——8.0新增了角色权限表(如role_edges、default_roles),而旧版mysqldump导出时没包含这些系统表,myloader又默认跳过mysql库,导致导入后权限校验失败或启动报错。
实操建议:
- 导出时必须显式包含系统库:
mysqldump --all-databases --skip-triggers --no-tablespaces --set-gtid-purged=OFF -u root -p > full.sql(注意:不要加--compatible,它会删掉8.0特有语法) - 若已用
mydumper做了逻辑备份,确认其版本 ≥ 0.10.0(老版本不支持8.0系统表),并检查dump目录下是否有mysql.*.sql文件 -
myloader导入前先停应用,并临时关闭super_read_only和read_only(否则无法写mysql库) - 导入命令加
-o参数强制覆盖已有表:myloader -u root -p -d /path/to/dump -o
导入卡在“Creating table mysql.user”或提示Row size too large
这不是myloader的问题,而是目标库innodb_strict_mode=ON在拦你——8.0对行大小校验变严,而5.7导出的mysql.user等系统表可能含冗余字段或老格式定义,触发ERROR 1118 (42000)。
实操建议:
- 导入前临时关严格模式:
SET GLOBAL innodb_strict_mode = OFF;(仅限导入窗口期,完事后立刻SET GLOBAL innodb_strict_mode = ON;) - 别依赖
myloader自动建库建表——先用mysql -e "CREATE DATABASE IF NOT EXISTS mysql CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"手动初始化mysql库 - 如果dump里有
CREATE TABLE mysql.user语句,手动删掉或注释掉,改用mysql_upgrade --force重建(见下一条)
导入后SELECT * FROM mysql.user返回空,但业务连不上
说明mysql库表结构已存在,但数据没进去,或权限缓存未刷新。典型于跳过mysql库导入、或myloader因权限不足静默跳过写入。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
实操建议:
- 查
myloader日志末尾是否含Skipping mysql.* tables或Access denied for user,确认运行用户有INSERT和CREATE权限 - 手动执行
mysql_upgrade --force --verbose(必须用8.0的二进制!路径如/usr/local/mysql-8.0/bin/mysql_upgrade) - 升级后立即执行
FLUSH PRIVILEGES;,否则缓存里的旧权限规则还在生效 - 验证是否修复:
SELECT COUNT(*) FROM mysql.user;应大于0;再试mysql -u testuser -p看能否登录
用myloader导入后performance_schema表全为空
performance_schema不是普通数据库,它是内存引擎,表结构由服务启动时动态生成。导入dump不会重建它,也不会填充历史数据——所以SELECT * FROM performance_schema.events_statements_summary_by_digest返回空是正常现象,不代表失败。
实操建议:
- 不用管空表,只要MySQL能正常启动、
SHOW ENGINES里PERFORMANCE_SCHEMA状态为YES即可 - 确认
performance_schema已启用:SELECT @@performance_schema;返回1 - 若需采集数据,等业务跑起来后自然填充;想立刻看到内容,可执行
SELECT * FROM performance_schema.setup_instruments WHERE ENABLED = 'YES' LIMIT 5;验证配置加载成功
真正容易被忽略的是:myloader本身不校验SQL语法兼容性,它只管把dump文件里的INSERT塞进表。一旦源库用了8.0才支持的JSON函数或窗口函数写进存储过程,而dump里又没过滤掉,导入后可能表面成功、实际调用时报错。这类问题得靠mysqlsh -- util check-for-server-upgrade提前扫一遍。

















