mysqlpump导出单个schema必须显式指定库名,否则不导出任何数据库;需加--skip-definer避免definer用户不存在报错,并配合--default-character-set=utf8mb4及目标库sql_mode兼容性处理。

mysqlpump导出单个schema时必须显式指定库名
直接运行 mysqlpump -u root -p > dump.sql 不会导出任何数据库——它默认不导出任何 schema,必须明确给出库名或使用 --databases/--all-databases。这是新手最常卡住的地方:命令执行完文件为空,却查不到报错。
- 正确写法:
mysqlpump -u root -p mydb > mydb.sql - 若目标库名要改(比如从
old_app迁到new_app),导出仍用原库名,导入时在目标端手动建库:CREATE DATABASE new_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 导出前确认用户有该 schema 的
SELECT权限,否则会静默跳过或报 ERROR 1045
跨版本迁移时 --skip-definer 是必加项
mysqlpump 默认导出 DEFINER='user'@'host',而目标库往往没有同名用户,导入直接失败:ERROR 1449 (HY000): The user specified as a definer ('u'@'%') does not exist。mysqldump 默认不带 DEFINER,但 mysqlpump 不同。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
- 必须加
--skip-definer,例如:mysqlpump -u root -p --skip-definer mydb > mydb.sql - 如果源库用了视图/存储过程且依赖 DEFINER 逻辑,需在目标库提前创建对应用户并赋权,不能只靠
--skip-definer - MySQL 8.0+ 中
mysql.user表结构变更,DEFINER 用户的plugin字段值(如caching_sha2_password)需与目标库兼容
--parallel-schemas 提速有效,但别盲目设高
--parallel-schemas=4 看起来很诱人,但它按 schema 并行,不是按表;单 schema 下再多线程也无效。对单库迁移,真正起效的是 --default-parallelism(MySQL 8.0+ 支持)。
- 单库场景用:
mysqlpump -u root -p --default-parallelism=4 --skip-definer mydb > mydb.sql -
--parallel-schemas只在同时导出多个库(--databases db1 db2 db3)时才分库并发,此时值应 ≤ 库数量 - 并行数过高反而触发连接数限制或磁盘 I/O 瓶颈,建议从 2 开始测试,观察
SHOW PROCESSLIST中活跃线程数
导入前必须处理字符集和 sql_mode 兼容性
mysqlpump 导出的 SQL 默认不含 SET NAMES 或 SET sql_mode,而 MySQL 8.0 默认启用严格模式,5.7 导出的数据可能含隐式默认值缺失字段,导致 ERROR 1364 (HY000): Field doesn't have a default value。
- 导入命令务必加
--default-character-set=utf8mb4:mysql -u root -p --default-character-set=utf8mb4 new_app - 临时放宽目标库限制(仅限导入阶段):
mysql -u root -p -e "SET GLOBAL sql_mode='';" && mysql -u root -p --default-character-set=utf8mb4 new_app - 导出时显式指定字符集更稳妥:
mysqlpump -u root -p --default-character-set=utf8mb4 --skip-definer mydb > mydb.sql
--skip-definer,若目标库 sql_mode 仍为严格模式,且源表有无默认值的 NOT NULL 字段,导入照样失败。这两处必须同步处理。










