MySQL Shell 的 util.dumpInstance() 本身不创建物理备份,仅调用外部工具:默认调用 mysqldump(逻辑备份),需手动配置 physicalBackup: true 并安装 MySQL Enterprise Backup 才能执行物理备份。

MySQL Shell 本身不直接创建物理备份,它只是调用 mysqlpump 或 mysqldump(逻辑备份),或通过 util.dumpInstance() 调用 mysqlbackup(物理备份)——但后者要求企业版和 MySQL Enterprise Backup 工具已安装并配置好。
为什么 util.dumpInstance() 执行失败?
最常见的原因是误以为它自带备份能力。实际上:
-
util.dumpInstance()是 MySQL Shell 的 JavaScript/Python API 函数,仅负责生成 dump 命令并调用外部工具 - 默认使用
mysqldump(逻辑备份),若未安装或不在$PATH中,会报错:Util.dumpInstance: Could not find mysqldump in PATH - 若指定
{ "compatibility": ["mariadb"] }或{ "ocimds": true },仍依赖mysqldump,不会自动切换到其他工具 - 想用物理备份(
mysqlbackup),必须手动设置"chunking": false并确保mysqlbackup可执行且有权限访问数据目录
如何正确执行逻辑备份(推荐日常使用)
逻辑备份兼容性好、可读性强,适合开发/测试环境迁移或小规模实例:
- 连接后直接运行:
util.dumpInstance("/path/to/backup/", { "includeSchemas": ["mydb"], "users": false }) -
"users"设为false避免导出mysql.user表(权限问题常见) - 路径必须是 MySQL Server 进程有写权限的本地目录(不是客户端机器),否则报错:
Access denied for user 'root'@'localhost' (using password: YES)实际是写文件权限问题 - 大库建议加
"bytesPerChunk": 1024*1024*50(50MB)控制内存占用,避免 OOM
物理备份需要哪些前置条件?
只有 MySQL Enterprise Edition + MySQL Enterprise Backup(MEB)才能用 util.dumpInstance() 触发物理备份:
- 确认已安装 MEB:运行
mysqlbackup --version应返回版本号,且二进制在$PATH - MySQL 配置中必须启用
innodb_file_per_table=ON,且datadir不在 NFS 或只读挂载点上 - 执行前需授予用户
BACKUP_ADMIN权限:GRANT BACKUP_ADMIN ON *.* TO 'backupuser'@'localhost'; - 调用时显式指定引擎:
util.dumpInstance("/backup/path/", { "physicalBackup": true, "threads": 4 })—— 缺少"physicalBackup": true仍走逻辑路径
物理备份虽快,但恢复必须用 mysqlbackup,不能用 mysqld 直接启动;逻辑备份的 .sql 文件则随时可用 mysql 导入。别把备份路径设在 /tmp 下——重启可能清空,也别忽略 --defaults-file 里密码明文的风险。


















