2009-07-03 11 views
28

¿Cómo puedo hacer una copia de seguridad completa de la base de datos mysql usando mysqldump? Cuando realizo una copia de seguridad, mis tablas de la base de datos especificada solo reciben una copia de seguridad. Los procedimientos y funciones no sonCómo tomar una copia de seguridad completa de la base de datos mysql usando la utilidad de línea de comandos mysqldump

Aquí está el comando de copia de seguridad que estoy utilizando:
(El sistema operativo es Windows Vista.)

mysqldump -u username -p db1 > backup.sql 

Respuesta

12

Depende un poco de su versión. Antes de 5.0.13 esto no es posible con mysqldump.

Desde la página del mysqldump (v 5.1.30)

--routines, -R 

     Dump stored routines (functions and procedures) from the dumped 
     databases. Use of this option requires the SELECT privilege for the 
     mysql.proc table. The output generated by using --routines contains 
     CREATE PROCEDURE and CREATE FUNCTION statements to re-create the 
     routines. However, these statements do not include attributes such 
     as the routine creation and modification timestamps. This means that 
     when the routines are reloaded, they will be created with the 
     timestamps equal to the reload time. 
     ... 

     This option was added in MySQL 5.0.13. Before that, stored routines 
     are not dumped. Routine DEFINER values are not dumped until MySQL 
     5.0.20. This means that before 5.0.20, when routines are reloaded, 
     they will be created with the definer set to the reloading user. If 
     you require routines to be re-created with their original definer, 
     dump and load the contents of the mysql.proc table directly as 
     described earlier. 
0

Uso '-R' a los procedimientos de copia de seguridad almacenada, sino también tener en cuenta que si quieres un volcado consistente de su base de datos, mientras que su bienestar modificado es necesario utilizar --single-transaction (si sólo innodb copia de seguridad) o --lock-all-tables (si también necesita tablas MyISAM)

12

utilizar estos comandos: -

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

Si nos quieren copia de seguridad sólo los procedimientos almacenados y disparadores y no las tablas de MySQL y los datos entonces deben ejecutar algo como:

mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt <database> > outputfile.sql 

Si tiene que importar a otro db/servidor, tendrá que ejecutar algo como:

mysql <database> < outputfile.sql 
5

Además de la bandera --routines tendrá que conceder los permisos de usuario de copia de seguridad para leer los procedimientos almacenados:

GRANT SELECT ON `mysql`.`proc` TO <backup user>@<backup host>; 

Mi conjunto mínimo de privilegios subvención para el copia de seguridad de usuario son:

GRANT USAGE ON *.* TO ... 
GRANT SELECT, LOCK TABLES ON <target_db>.* TO ... 
GRANT SELECT ON `mysql`.`proc` TO ... 
+0

¡Concede privilegios, eso es lo que me faltaba! +1 – carla

+0

Y también, no olvide un 'PRIVILEGIOS DE LIMPIEZA;' al final. – carla

38

En caso de que quiera tomar copia de seguridad completa, es decir, todas las bases de datos, procedimientos, rutinas, eventos sin interrumpir las conexiones.

mysqldump -u <username> -p -A -R -E --triggers --single-transaction > full_backup.sql 
  1. -A- para todas las bases de datos (también se puede utilizar --all-databases).
  2. -R - para todas las rutinas.
  3. -E - para todos los eventos.
  4. --single-transaction - sin bloquear la tabla, es decir, sin interrumpir ninguna conexión (R/W).

En caso de que desee realizar una copia de seguridad de solo en la (s) base (s) de datos.

mysqldump -u <username> -p <Database_Name1><database2> -R -e --triggers --single-transaction > Database_backup.sql 

En caso de que desee realizar una copia de seguridad de una tabla específica en una base de datos.

mysqldump -u <username> -p <database_name> <Table_name> > table_backup.sql 

En caso que usted quiere tener copia de seguridad de una estructura de base de datos sólo basta con añadir --no-datos a los comandos anteriores.

mysqldump -u [username] –p[password] –-no-data [database_name] > [dump_file.sql] 

Del mismo modo, hay muchas más opciones con esta herramienta. Se puede encontrar más información en el siguiente enlace-- mysqldump information

1

Estoy usando MySQL 5.5.40. Esta versión cuenta con la opción --all-databases

mysqldump -u<username> -p<password> --all-databases --events > /tmp/all_databases__`date +%d_%b_%Y_%H_%M_%S`.sql 

Este comando creará una copia de seguridad completa de todas las bases de datos en el servidor MySQL para archivo con el nombre actual de fecha y hora.

Cuestiones relacionadas