Answers:
我通常不将触发器与它们原本打算的表分开。我这样转储:
mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql
检查是否存在例程和触发器,如下所示:
SELECT COUNT(1) FROM mysql.proc;
SELECT COUNT(1) FROM information_schema.triggers;
SELECT * FROM information_schema.triggers\G
如果要对MySQL实例中的所有数据库执行此操作,请执行以下操作:
mysql -u... -p... -A -N -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql')" > /tmp/dblist.txt
for DB in `cat /tmp/dblist.txt`
do
mysqldump -u... -p... --no-data --no-create-info --routines dbname > ${DB}-routines.sql
mysqldump -u... -p... --no-data --triggers dbname > ${DB}-schema-triggers.sql
done
这样,存储过程进入数据库的例程转储,而架构和触发器进入另一个转储。
--skip-triggers
在这种情况下使用(例如,设置不需要触发器的从属)。为了不断提醒自己可能跳过选项,我总是在mysqldumps(--routines
,--triggers
)中使用某些标志,即使它们是默认标志也是如此。因此,这只是个人喜好。如果您相信默认设置会在各个版本之间保持默认设置,并且永远不会处理特殊情况,那么只要生成的mysqldump对您而言正确,您就可以根据需要表达mysqldumps。
$2
;; \ n $ 1
grep 'CREATE TRIGGER'