Mysqldump può scaricare trigger e procedure?


10

Esiste un modo per creare un mysqldump che salverà tutti i trigger e le procedure da un db specificato?

Qualche tempo fa ho letto che mysqldumpsalverà anche i miei trigger, ma non sembra. La mia seconda domanda correlata è come posso controllare in un file sql se esistono trigger?

Risposte:


9

Normalmente non separo i trigger dai tavoli a cui erano destinati. Dump in questo modo:

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

Verificare la presenza di routine e trigger in questo modo:

SELECT COUNT(1) FROM mysql.proc;

SELECT COUNT(1) FROM information_schema.triggers;

SELECT * FROM information_schema.triggers\G

Se vuoi farlo a tutti i DB nell'istanza MySQL, procedi come segue:

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

In questo modo, le procedure memorizzate vanno in un dump di routine per il DB, mentre lo schema e i trigger vanno in un altro dump.


@dole Rolando ha ragione su come scaricare trigger / procedure. Se vuoi vedere se esistono in un file sql, aprilo e cerca le chiamate 'CREATE TRIGGER'. Se in * nix,grep 'CREATE TRIGGER'
Derek Downey il

@RolandoMySQLDBA, Non viene --triggersscaricato di default? Quale sarebbe la differenza tra --no-data --routines --triggersvs --no-data --routines?
Pacerier,

1
@Pacerier Ci sono state situazioni in cui non volevo i trigger e che avrei usato --skip-triggersin tali occasioni (come la creazione di slave che non avevano bisogno dei trigger). Come costante promemoria per me stesso della possibilità di saltare le opzioni, utilizzo sempre determinati flag in mysqldumps ( --routines, --triggers) anche se sono predefiniti. Quindi, è solo una preferenza personale. Se ritieni che un'impostazione predefinita rimanga predefinita da una versione all'altra e non affronti mai situazioni ad hoc, allora esprimi i mysqldump secondo necessità finché il mysqldump risultante è corretto per te.
RolandoMySQLDBA

@RolandoMySQLDBA - Cosa fa -A -N?
MontyPython,

Ho usato espressioni regolari per anteporre istruzioni trigger DROP: Sostituisci questo: (\ / * \! 50003 CREATE * \ / \ / * \! 50017 DEFINER \ = some_text_here * \ / \ / * \! 50003 TRIGGER (. *?) ) Con questo: DROP TRIGGER / *! 50032 SE ESISTE * / $2;; \ n $ 1
AlexandruSerban
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.