Обычно я не отделяю триггеры от таблиц, для которых они предназначены. Я сбрасываю, как это:
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
Таким образом, хранимые процедуры отправляются в дамп подпрограмм для БД, а схема и триггеры - в другой дамп.
grep 'CREATE TRIGGER'
--triggers
по умолчанию не сбрасывается? Какая разница между--no-data --routines --triggers
против--no-data --routines
?--skip-triggers
в таких случаях (например, при настройке рабов, которые не нуждались в триггерах). В качестве постоянного напоминания мне о возможности пропуска параметров, я всегда использую определенные флаги в mysqldumps (--routines
,--triggers
), даже если они установлены по умолчанию. Так что это просто личное предпочтение. Если вы уверены, что настройки по умолчанию останутся настройками по умолчанию от версии к версии и никогда не будут иметь дело с ситуациями adhoc, то вы выражаете mysqldumps так, как вам нужно, если полученный mysqldump верен для вас.$2
;; \ n $ 1