Volcar solo los procedimientos almacenados en MySQL

31

Necesito volcar solo los procedimientos almacenados: sin datos, sin creación de tablas. ¿Cómo puedo hacer esto usando mysqldump?

nakhli
fuente
1
+1 para esta pregunta porque hay muchos desarrolladores en el mundo de DB que les gusta catalogar procedimientos almacenados fuera de MySQL en el software de control de versiones que quisieran hacer esto (no soy fanático de hacerlo yo mismo)
RolandoMySQLDBA
En mi caso, este comando me dio un error mysqldump: Got error: 23: "Out of resources when opening file". Tenía la --single-transactionopción de resolver este error. Y si solo desea la rutina, puede agregar, -no-create-infopara evitar la instrucción de crear tabla.
bedomon

Respuestas:

34

Esto debería hacerlo por ti:

mysqldump -h... -u... -p... -n -d -t --routines --triggers --all-databases > MySQLStoredProc.sql

  -n, --no-create-db     Suppress the CREATE DATABASE ... IF EXISTS statement 
                         that normally is output for each dumped database if
                         --all-databases or --databases is given.
  -d, --no-data          No row information.
  --triggers             Dump triggers for each dumped table.
                         (Defaults to on; use --skip-triggers to disable.)
  -R, --routines         Dump stored routines (functions and procedures).
  -t, --no-create-info   Do not write CREATE TABLE statements that create each 
                         dumped table.

ADVERTENCIA

Sería mucho mejor no separar los procedimientos almacenados de la base de datos para que se creen procedimientos almacenados específicos en la base de datos para la que fue diseñada. Lo mismo ocurre con los desencadenantes. Esto sería preferible:

mysqldump -h... -u... -p... -d --routines --triggers --all-databases > MySQLStoredProc.sql
RolandoMySQLDBA
fuente
99
Intenté esto y tuve que agregar la opción '-t' para no obtener las instrucciones de crear tabla.
Derek Downey
Olvidé eso, lástima que no pueda votar los comentarios. Actualicé el primer comando mysqldump para incluirlo. El segundo debe dejarse afuera para asociar cada disparador a su tabla base. Gracias de nuevo, @DTest !!!
RolandoMySQLDBA
No hay problema. En mi caso, solo quería funciones / procedimientos almacenados para una base de datos específica, y no disparadores. Así que funcionó bien
Derek Downey