¿Cómo exportar una base de datos MySQL con disparadores y procedimientos?

83

¿Cómo crear un volcado de base de datos MySQL ( .sqlarchivo) con todos sus desencadenantes y procedimientos?

Yugal
fuente
Simplemente agregue la opción -R en el comando mysqldump.
Deepanshu Jain

Respuestas:

122

mysqldumphará una copia de seguridad por defecto de todos los disparadores pero NO de los procedimientos / funciones almacenados . Hay 2 parámetros de mysqldump que controlan este comportamiento:

  • --routines - FALSO por defecto
  • --triggers - VERDADERO por defecto

así que al mysqldumpmando, agregue --routinescomo:

mysqldump <other mysqldump options> --routines > outputfile.sql

Consulte la documentación de MySQL sobre los argumentos de mysqldump .

Haim Evgi
fuente
tengo MySQL "5.1.48-community" ejecuto "mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt> dumpfile.sql;" pero está dando un error y el error es "ERROR 1064 (42000): Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para la sintaxis correcta para usar cerca de 'mysql dump --routines --no -create-info --no-data --no-create-db --skip-opt> dum 'en la línea 1 ". ¿Cómo resolverlo? -
Yugal
agregue al comando "-p -uusername dbname", y no necesita el ";" firmar al final
Haim Evgi
1
También tenga en cuenta que debe ejecutar mysqldump en el indicador de shell, no en el cliente de línea de comandos de MySQL o en phpMyAdmin u otra herramienta de consulta.
Bill Karwin
@HaimEvgi, ¿Por qué dices en -routineslugar de --routines?
Pacerier
--routinesSin embargo, solo funciona si el usuario tiene suficientes derechos de acceso a la mysql.procmesa. GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Rocki
20

Puede ser obvio para los usuarios expertos de MYSQL, pero perdí algo de tiempo tratando de averiguar el valor predeterminado que no exportaría funciones. Así que pensé mencionar aquí que --routines param debe establecerse en verdadero para que funcione.

mysqldump --routines=true -u <user> my_database > my_database.sql
Usman
fuente
1
No es necesario utilizar --routines = true. Los sprocs NO se descargan de forma predeterminada. Simplemente necesita incluir --rutinas según el ejemplo en la respuesta aceptada.
gview
6

Creé el siguiente script y me funcionó muy bien.

#! /bin/sh
cd $(dirname $0)
DB=$1
DBUSER=$2
DBPASSWD=$3
FILE=$DB-$(date +%F).sql
mysqldump --routines "--user=${DBUSER}"  --password=$DBPASSWD $DB > $PWD/$FILE
gzip $FILE
echo Created $PWD/$FILE*

y llama al script usando argumentos de línea de comando.

backupdb.sh my_db dev_user dev_password
Krishna Vedula
fuente
hola, en la línea 7, ¿por qué la variable DBUSER está entre "" y las demás no?
rafaelphp