Normalmente, não separo os gatilhos das tabelas para as quais eles foram feitos. Eu despejo assim:
mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql
Verifique a presença de rotinas e gatilhos como este:
SELECT COUNT(1) FROM mysql.proc;
SELECT COUNT(1) FROM information_schema.triggers;
SELECT * FROM information_schema.triggers\G
Se você deseja fazer isso com todos os bancos de dados na instância do MySQL, faça o seguinte:
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
Dessa forma, os procedimentos armazenados são executados em um despejo de rotinas para o banco de dados, enquanto o esquema e os disparadores entram em outro despejo.
grep 'CREATE TRIGGER'
--triggers
despejado por padrão? Qual seria a diferença entre--no-data --routines --triggers
vs--no-data --routines
?--skip-triggers
nessas ocasiões (como a criação de escravos que não precisavam dos gatilhos). Como um lembrete constante para mim mesmo da possibilidade de ignorar opções, eu sempre uso certos sinalizadores no mysqldumps (--routines
,--triggers
) mesmo que sejam padrão. Então, é apenas uma preferência pessoal. Se você confia que uma configuração padrão continuará sendo padrão de versão para versão e nunca lida com situações adhoc, expresse os mysqldumps conforme necessário, desde que o mysqldump resultante esteja correto para você.$2
;; \ n $ 1