Mysqldump peut-il vider les déclencheurs et les procédures?

10

Existe-t-il un moyen de créer un mysqldump qui sauvera tous les déclencheurs et procédures d'une base de données spécifiée?

Il y a quelque temps, j'ai lu que mysqldumpcela sauverait également mes déclencheurs, mais cela ne ressemble pas à ça. Ma deuxième question connexe est de savoir comment puis-je archiver un fichier SQL si des déclencheurs existent?

dole doug
la source

Réponses:

9

Normalement, je ne sépare pas les déclencheurs des tables auxquelles ils étaient destinés. Je jette comme ça:

mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql

Vérifiez la présence de routines et de déclencheurs comme celui-ci:

SELECT COUNT(1) FROM mysql.proc;

SELECT COUNT(1) FROM information_schema.triggers;

SELECT * FROM information_schema.triggers\G

Si vous souhaitez que cela soit fait sur toutes les bases de données de l'instance MySQL, procédez comme suit:

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

De cette façon, les procédures stockées vont dans un vidage de routines pour la base de données, tandis que le schéma et les déclencheurs vont dans un autre vidage.

RolandoMySQLDBA
la source
@dole Rolando a le droit de vider les déclencheurs / procédures. Si vous voulez voir s'ils existent dans un fichier sql, ouvrez-le et recherchez les appels 'CREATE TRIGGER'. Si dans * nix,grep 'CREATE TRIGGER'
Derek Downey
@RolandoMySQLDBA, n'est pas --triggersvidé par défaut? Quelle serait la différence entre --no-data --routines --triggersvs --no-data --routines?
Pacerier
1
@Pacerier Il y a eu des situations où je ne voulais pas de déclencheurs et que j'utilisais --skip-triggersà de telles occasions (comme la configuration d'esclaves qui n'avaient pas besoin des déclencheurs). Pour me rappeler constamment la possibilité de sauter des options, j'utilise toujours certains drapeaux dans mysqldumps ( --routines, --triggers) même s'ils sont par défaut. Donc, c'est juste une préférence personnelle. Si vous croyez qu'un paramètre par défaut restera un paramètre par défaut d'une version à une autre et ne traitera jamais de situations ad hoc, alors vous exprimez les mysqldumps comme nécessaire tant que le mysqldump résultant est correct pour vous.
RolandoMySQLDBA
@RolandoMySQLDBA - Que fait -A -N?
MontyPython
J'ai utilisé des expressions régulières pour ajouter des instructions de déclenchement DROP: Remplacez ceci: (\ / * \! 50003 CREATE * \ / \ / * \! 50017 DEFINER \ = some_text_here * \ / \ / * \! 50003 TRIGGER (. *?) ) Avec ceci: DROP TRIGGER / *! 50032 SI EXISTE * / $2;; \ n $ 1
AlexandruSerban