Zwykle nie oddzielam wyzwalaczy od tabel, dla których były przeznaczone. Zrzucam tak:
mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql
Sprawdź obecność takich procedur i wyzwalaczy:
SELECT COUNT(1) FROM mysql.proc;
SELECT COUNT(1) FROM information_schema.triggers;
SELECT * FROM information_schema.triggers\G
Jeśli chcesz to zrobić dla wszystkich baz danych w instancji MySQL, wykonaj następujące czynności:
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
W ten sposób procedury składowane przechodzą do zrzutu procedury dla bazy danych, podczas gdy schemat i wyzwalacze przechodzą do kolejnego zrzutu.
grep 'CREATE TRIGGER'
--triggers
domyślnie nie jest zrzucany? Jaka byłaby różnica między--no-data --routines --triggers
vs--no-data --routines
?--skip-triggers
przy takich okazjach (takich jak konfigurowanie niewolników, które nie potrzebowały wyzwalaczy). Jako stałe przypomnienie sobie o możliwości pomijania opcji, zawsze używam pewnych flag w mysqldumps (--routines
,--triggers
), nawet jeśli są one domyślne. To tylko osobiste preferencje. Jeśli ufasz, że ustawienie domyślne pozostanie domyślnym w zależności od wersji i nigdy nie poradzisz sobie z sytuacjami doraźnymi, to wyrażasz mysqldump w razie potrzeby, o ile wynikowy mysqldump jest odpowiedni dla Ciebie.$2
;; \ n $ 1