如何跳过mysqldump的Checking Permission状态,加速MySQL 8数据库导出?
MySQL 8 升级后 mysqldump 导出速度骤慢(Checking Permission 阶段)的原因与优化方案
原因分析
MySQL 8 对 mysqldump 的权限校验逻辑进行了更新,在Checking Permission阶段会主动查询 INFORMATION_SCHEMA.FILE 表中 FILE_TYPE = 'UNDO_LOG' 的记录,目的是验证导出用户是否具备访问InnoDB Undo日志文件的权限(属于新版本权限管控的增强项)。
(配图:
)
升级后导出变慢的核心诱因:
INFORMATION_SCHEMA.FILE表在MySQL 8中存储了更详尽的底层文件元数据,且针对UNDO_LOG类型的查询未建立高效索引,当实例中Undo日志文件数量较多(比如开启独立表空间、拆分了多个Undo表空间)时,全表扫描的开销会被显著放大,直接拖慢权限检查阶段的执行速度。- 你的实例包含33个InnoDB表,升级前无此校验逻辑,因此导出速度不受影响。
加速方案
1. 跳过权限检查(快速解决)
若导出用户为超级权限用户(如root),可直接在mysqldump命令中添加--skip-check-permissions参数,跳过耗时的权限校验步骤:
mysqldump --skip-check-permissions -u root -p your_database > dump.sql
注意:仅在信任导出用户权限、无需严格权限校验的场景下使用。
2. 优化元数据查询性能
- 升级MySQL补丁版本:MySQL 8.0.26及以后的版本优化了
INFORMATION_SCHEMA.FILE的查询效率,建议升级到最新稳定版,从底层修复该问题。 - 调整元数据缓存时长:临时修改
information_schema_stats_expiry参数,延长INFORMATION_SCHEMA表统计信息的缓存时间,避免频繁的元数据扫描:
SET GLOBAL information_schema_stats_expiry = 3600; -- 缓存时长设为1小时,默认86400秒
3. 优化Undo表空间配置(长期优化)
若实例中存在大量Undo表空间文件,可通过合并表空间减少FILE表中的记录数:
- 修改
my.cnf(或my.ini)配置文件,设置innodb_undo_tablespaces = 2(根据实际需求调整为合适数量) - 重启MySQL服务,系统会自动创建新的Undo表空间
- 待旧Undo表空间不再被引用后,删除对应的物理文件(需在维护窗口操作,确保数据安全)
内容的提问来源于stack exchange,提问作者kalpesh bhad
相关产品推荐
相关产品推荐


)