导出存储过程必须勾选--routines参数,DBeaver默认不导出;Mac需配置mysqldump路径至Driver的Client Home;仅导例程应选Selected objects并搭配--no-create-info、--no-data。

导出存储过程必须勾选 --routines
DBeaver 的「转储数据库」默认不导出存储过程、函数、事件,哪怕你数据库里明明有 Stored Procedures 节点。关键在于导出命令是否带了 --routines 参数——这是 MySQL 原生 mysqldump 的行为,DBeaver 只是调用它。
操作时,在「Dump database」向导的第二步(导出选项页),必须手动勾选:
- --routines(导出存储过程和函数)
- 如果你还用了触发器,顺手勾上 --triggers
- --add-drop-procedure 可选,加了会在脚本开头加 DROP PROCEDURE IF EXISTS,避免导入时报“已存在”错误
Mac 上提示 “Error executing process” 多半是 mysqldump 没配对
Mac 用户最容易卡在这一步:点了「开始」直接报错 Error executing process,日志里还夹着 Cannot run program "mysqldump"。
这不是 DBeaver 问题,而是它找不到本地 mysqldump。你需要确认两件事:
- 终端执行
which mysqldump有输出路径(比如/opt/homebrew/bin/mysqldump) - DBeaver 的 Driver 配置里,
Client Home指向的是该路径的**父目录**(例如/opt/homebrew/bin),不是 JDBC 驱动 jar 包所在目录
进 Database → Driver Manager → MySQL → Edit → Local Client,点 Add Home,用 Cmd+Shift+G 手动粘贴路径进去,别靠文件选择器翻——它常过滤掉隐藏或非图形化目录。
右键「编辑」看到的脚本 ≠ 导出文件里的最终内容
在数据库节点下展开 Stored Procedures,右键某个过程选「编辑」,弹窗里看到的确实是原始 CREATE PROCEDURE 语句,但注意:
- 这个视图不包含
DELIMITER声明,实际导出的 SQL 文件里会有(因为mysqldump自动加) - 如果过程里用了
DEFINER = 'user'@'host',导出脚本会原样保留;导入到其他环境时可能因用户不存在失败,可提前用文本工具全局替换为DEFINER = CURRENT_USER - 导出时若没勾
--no-create-info,脚本里还会混入表结构和数据,纯要例程就别漏掉这个开关
只导出存储过程,不导数据和表结构
有时你只要例程迁移,不想带几 GB 表数据。这时在 Dump 向导第一步,不要选「Entire database」,而选「Selected objects」,然后只勾选 Procedures 和 Functions(视图、事件同理)。
再配合参数组合:
-
--no-create-info:跳过CREATE TABLE等结构语句 -
--no-data:跳过所有INSERT -
--routines:必须保留,否则啥也不出
导出文件体积会从几百 MB 缩到几 KB,且内容干净,只有 CREATE PROCEDURE 和 CREATE FUNCTION 块。
真正容易被忽略的是:DBeaver 不会校验你勾的参数之间是否冲突,比如同时选「整个数据库」又勾「--no-data」,它照常执行但结果不符合直觉——得自己盯住「Selected objects」和参数的搭配关系。











