mysqldump 可以转储触发器和程序吗?

dol*_*oug 13 mysql mysqldump trigger backup stored-procedures

有没有办法制作一个 mysqldump 来保存指定数据库中的所有触发器和过程?

前段时间我读到这mysqldump也将保存我的触发器,但它看起来不像。我的第二个相关问题是如果触发器存在,我如何检入 sql 文件?

Rol*_*DBA 14

我通常不会将触发器与它们适用的表分开。我这样倾倒:

mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql
Run Code Online (Sandbox Code Playgroud)

检查是否存在这样的例程和触发器:

SELECT COUNT(1) FROM mysql.proc;

SELECT COUNT(1) FROM information_schema.triggers;

SELECT * FROM information_schema.triggers\G
Run Code Online (Sandbox Code Playgroud)

如果要对 MySQL 实例中的所有数据库执行此操作,请执行以下操作:

mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql
Run Code Online (Sandbox Code Playgroud)

这样,存储过程进入数据库的例程转储,而模式和触发器进入另一个转储。

  • @Pacerier 在某些情况下,我不想要触发器,在这种情况下我会使用 `--skip-triggers`(例如设置不需要触发器的从属设备)。为了不断提醒自己跳过选项的可能性,我总是在 mysqldumps(`--routines`、`--triggers`)中使用某些标志,即使它们是默认的。所以,这只是个人喜好。如果您相信默认设置会在不同版本之间保持默认设置并且从不处理临时情况,那么只要结果 mysqldump 对您来说是正确的,您就可以根据需要表达 mysqldumps。 (2认同)