mysqldumpはトリガーとプロシージャをダンプできますか?


10

指定されたデータベースからすべてのトリガーとプロシージャを保存するmysqldumpを作成する方法はありますか?

少し前に私はそれを読んでmysqldumpトリガーも保存されますが、そのようには見えません。2つ目の関連する質問は、トリガーが存在する場合にSQLファイルをチェックインするにはどうすればよいですか?

回答:


9

通常、トリガーを対象としたテーブルからトリガーを分離しません。私はこのようにダンプします:

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のルーチンダンプに入れられ、スキーマとトリガーは別のダンプに入れられます。


トリガー/手順をダンプする方法に関する@dole Rolandoの権利。それらがsqlファイルに存在するかどうかを確認する場合は、それを開いて「CREATE TRIGGER」呼び出しを検索します。* nixの場合grep 'CREATE TRIGGER'
Derek Downey

@RolandoMySQLDBA、--triggersデフォルトではダンプされませんか?--no-data --routines --triggersvsは--no-data --routinesどう違いますか?
Pacerier、2015年

1
@Pacerier --skip-triggersトリガーが不要で、そのような場合に使用する状況がありました(トリガーを必要としないスレーブの設定など)。オプションをスキップする可能性を常に思い出させるため--routines--triggersデフォルトの場合でも、mysqldumps(、)で常に特定のフラグを使用します。したがって、それは単なる個人的な好みです。デフォルトの設定がバージョン間でデフォルトのままであり、アドホックな状況に決して対処しないと信頼できる場合は、結果のmysqldumpが正しい限り、必要に応じてmysqldumpを表現します。
RolandoMySQLDBA 2015年

@RolandoMySQLDBA--A -Nは何をしますか?
MontyPython、2015

正規表現を使用してDROPトリガーステートメントを付加しました:これを置き換えます:(\ / * \!50003 CREATE * \ / \ / * \!50017 DEFINER \ = some_text_here * \ / \ / * \!50003 TRIGGER(。*?) )これを使用する場合:DROP TRIGGER / *!50032 IF EXISTS * / $2;; \ n $ 1
AlexandruSerban
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.