Normalerweise trenne ich Trigger nicht von den Tabellen, für die sie bestimmt waren. Ich entleere so:
mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql
Überprüfen Sie, ob Routinen und Auslöser wie folgt vorhanden sind:
SELECT COUNT(1) FROM mysql.proc;
SELECT COUNT(1) FROM information_schema.triggers;
SELECT * FROM information_schema.triggers\G
Wenn Sie dies für alle DBs in der MySQL-Instanz ausführen möchten, gehen Sie folgendermaßen vor:
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
Auf diese Weise werden gespeicherte Prozeduren in einem Routine-Dump für die Datenbank gespeichert, während das Schema und die Trigger in einem anderen Dump gespeichert werden.
grep 'CREATE TRIGGER'
--triggers
standardmäßig ausgegeben ? Was wäre der Unterschied zwischen--no-data --routines --triggers
vs--no-data --routines
?--skip-triggers
bei solchen Gelegenheiten verwendete (z. B. das Einrichten von Slaves, die die Trigger nicht benötigten). Als ständige Erinnerung an die Möglichkeit, Optionen zu überspringen, verwende ich in mysqldumps (--routines
,--triggers
) immer bestimmte Flags , auch wenn sie Standard sind. Es ist also nur eine persönliche Präferenz. Wenn Sie darauf vertrauen, dass eine Standardeinstellung von Version zu Version Standard bleibt und sich niemals mit Ad-hoc-Situationen befasst, drücken Sie die mysqldumps nach Bedarf aus, solange der resultierende mysqldump für Sie korrekt ist.$2
;; \ n $ 1