web-dev-qa-db-ja.com

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

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

先ほど、mysqldumpもトリガーを保存することを読んだのですが、見た目がよくありません。 2つ目の関連する質問は、トリガーが存在する場合にSQLファイルをチェックインするにはどうすればよいですか?

10
dole doug

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

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

9
RolandoMySQLDBA