¿MySqldump puede volcar disparadores y procedimientos?

10

¿Hay alguna forma de hacer un mysqldump que guarde todos los desencadenantes y procedimientos de un db especificado?

Hace algún tiempo leí que mysqldumpeso también salvará mis disparadores, pero no lo parece. Mi segunda pregunta relacionada es ¿cómo puedo registrar un archivo sql si existen disparadores?

Dole Douglas
fuente

Respuestas:

9

Normalmente no separo los desencadenantes de las tablas para las que fueron diseñados. Me vuelvo así:

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

Verifique la presencia de rutinas y desencadenantes como este:

SELECT COUNT(1) FROM mysql.proc;

SELECT COUNT(1) FROM information_schema.triggers;

SELECT * FROM information_schema.triggers\G

Si desea hacer esto en todos los DB en la instancia de MySQL, haga esto:

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 esa forma, los procedimientos almacenados van en un volcado de rutinas para el DB, mientras que el esquema y los desencadenantes van en otro volcado.

RolandoMySQLDBA
fuente
@dole Rolando tiene razón sobre cómo volcar los desencadenantes / procedimientos. Si desea ver si existen en un archivo sql, ábralo y busque llamadas 'CREATE TRIGGER'. Si en * nix,grep 'CREATE TRIGGER'
Derek Downey
@RolandoMySQLDBA, ¿no se --triggersabandona por defecto? ¿Cuál sería la diferencia entre --no-data --routines --triggersvs --no-data --routines?
Pacerier
1
@Pacerier Ha habido situaciones en las que no quería disparadores y los usaría --skip-triggersen tales ocasiones (como configurar esclavos que no necesitaban los disparadores). Como un recordatorio constante para mí mismo de la posibilidad de omitir opciones, siempre uso ciertos indicadores en mysqldumps ( --routines, --triggers) incluso si son predeterminados. Entonces, es solo una preferencia personal. Si confía en que una configuración predeterminada seguirá siendo una versión predeterminada y nunca se ocupará de situaciones ad hoc, entonces expresa los mysqldumps según sea necesario siempre que el mysqldump resultante sea correcto para usted.
RolandoMySQLDBA
@RolandoMySQLDBA - ¿Qué hace -A -N?
MontyPython
He usado expresiones regulares para anteponer declaraciones de activación DROP: Reemplace esto: (\ / * \! 50003 CREATE * \ / \ / * \! 50017 DEFINER \ = some_text_here * \ / \ / * \! 50003 TRIGGER (. *?) ) Con esto: DROP TRIGGER / *! 50032 IF EXISTS * / $2;; \ n $ 1
AlexandruSerban el