回答:
通常、トリガーを対象としたテーブルからトリガーを分離しません。私はこのようにダンプします:
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インスタンス内のすべてのDBに対して実行する場合は、次のようにします。
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
このように、ストアドプロシージャはDBのルーチンダンプに入れられ、スキーマとトリガーは別のダンプに入れられます。
--triggers
デフォルトではダンプされませんか?--no-data --routines --triggers
vsは--no-data --routines
どう違いますか?
--skip-triggers
トリガーが不要で、そのような場合に使用する状況がありました(トリガーを必要としないスレーブの設定など)。オプションをスキップする可能性を常に思い出させるため--routines
、--triggers
デフォルトの場合でも、mysqldumps(、)で常に特定のフラグを使用します。したがって、それは単なる個人的な好みです。デフォルトの設定がバージョン間でデフォルトのままであり、アドホックな状況に決して対処しないと信頼できる場合は、結果のmysqldumpが正しい限り、必要に応じてmysqldumpを表現します。
$2
;; \ n $ 1
grep 'CREATE TRIGGER'