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