导出存储过程与事件
存储过程、函数与事件调度器对象默认不在 mysqldump 的导出范围内:不加对应选项,恢复出来的库会缺这些程序性对象,业务调用时报对象不存在。这是典型的「备份看起来成功、恢复才发现不全」事故,属于备份完整性检查的必查项。
基本信息
| 导出过程与函数 | --routines |
|---|---|
| 导出事件 | --events |
| 触发器 | --triggers 默认开启,通常无需显式添加 |
| 失败惯例 | 对象缺失时恢复不报错,直到业务调用才暴露 |
| 恢复前提 | 执行恢复的账号需要创建过程、函数与事件的权限 |
典型使用场景
- 业务依赖存储过程:计算逻辑写在库内,备份必须带上过程与函数
- 定时任务用事件实现:事件调度器对象漏导会导致定时逻辑整体消失
- 跨环境同步:开发或测试环境需要与生产一致的程序性对象定义
- 迁移到新实例:迁移前用带完整选项的备份,避免迁移后手工补对象
- 备份完整性自查:恢复演练时校验对象数量是否与源库一致
完整导出与校验
完整导出与校验
# 一次性导出结构、数据与程序性对象
mysqldump -uroot -p --single-transaction --routines --events --triggers \
--databases appdb > appdb_full.sql
# 确认导出文件里确实包含对象定义
grep -c "CREATE.*PROCEDURE\|CREATE.*FUNCTION\|CREATE.*EVENT" appdb_full.sql
# 对比源库与备份中的对象数量
mysql -uroot -p -e "SELECT ROUTINE_TYPE, COUNT(*) FROM information_schema.ROUTINES GROUP BY ROUTINE_TYPE;"
mysql -uroot -p -e "SELECT COUNT(*) FROM information_schema.EVENTS;"选项对照
| 选项 | 覆盖对象 | 默认状态 |
|---|---|---|
| --routines | 存储过程与存储函数 | 不导出 |
| --events | 事件调度器对象 | 不导出 |
| --triggers | 表上的触发器 | 默认导出 |
| --databases | 带建库语句导出多个库 | 需显式指定 |
导出的过程与函数会带上定界符声明,手工修改文件后要确认定界符仍然正确,否则执行会中断。
开启二进制日志且 log_bin_trust_function_creators 关闭时,恢复过程中创建函数会失败,恢复前要确认该参数。
完整性自查清单
- 对象数量比对:源库与恢复库的过程、函数、事件数量一致
- 定界符检查:导出文件中的过程与函数体定界符正确
- 权限核对:恢复账号具备创建过程、函数与事件的权限
- 触发验证:在测试库调用一次关键过程,确认逻辑可执行