2012-01-26 21 views
15

I copia de seguridad de mi base de datos de producción con el siguiente comando:restauración MySQL a diferentes bases de datos

mysqldump -u root --opt --skip-extended-insert --databases my_production_db 

El archivo de volcado resultante tiene las siguientes líneas en la parte superior:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `my_production_db` /*!40100 DEFAULT CHARACTER SET latin1 */; 
USE `my_production_db `; 

Con el fin de restaurar la base de datos a un destino diferente, es decir. my_debvelopment_db Debo abrir el archivo de volcado y editar los bits donde se nombra la base de datos.

Luego ejecutar:

mysql -u root -p <password> < mydumpfile 

no he descubierto otra manera de hacerlo.

A medida que la base de datos crece, esto se vuelve poco práctico.

¿Echo de menos algo? ¿No puedo especificar de alguna manera dónde quiero restaurar la base de datos? ¿Necesitaría un comando de copia de seguridad diferente?

Respuesta

9

Si deja caer la opción --databases pero todavía especifica el nombre de la base de datos, NO obtendrá los enunciados de creación de la base de datos. es decir:

mysqldump -u root --opt --skip-extended-insert my_production_db 

En su máquina de desarrollo simplemente cree cualquier base de datos que desee restaurar.

+2

Incluso sin una opción '--databases', parece' mysqldump' aún puede generar referencia a un nombre de base de datos en el volcado. Al menos tengo problemas con algunos 'ALTER DATABASE \ 'dbname \' CHARACTER SET utf8 COLLATE utf8_bin' en un volcado de base de datos, sin usar la opción '--databases'. Y hubo dos de estos, el segundo anulando el primero. – Hibou57

41

@minaz respuesta fue buena, pero quiero agregar un poco más.

El problema fue causado por la palabra clave --databases. Si omite la palabra clave, no contendrá ningún contenido de creación de base de datos.

Por lo tanto, volcado sin --databases palabra clave.

mysqldump -u username -p database_name > dump.sql 

Y restaurarlo con el nombre de la base de datos de destino.

mysql -u username -p target_database_name < dump.sql 

Además, hay varias maneras de hacerlo. Consulte el problema similar en here (dba.stackexchange).

+0

Creo que hay un error con '-p nombre_base_datos', ya que el nombre de la opción' -p' es el nombre abreviado de la opción '--contraseña'. – Hibou57

+10

@ Hibou57 Gracias por tu comentario. Sí, '-p' significa' --contraseña' como mencionaste. Pero '-p' en realidad significa 'Voy a poner mi contraseña a través del prompt'. Si desea poner la contraseña a través de la opción de comando, no debe haber ningún espacio en blanco como '-p ' no '-p '. – lqez

+0

http://dev.mysql.com/doc/refman/5.5/en/mysql-command-options.html#option_mysql_password – lqez

0

Si ya tiene su volcado, puede quitar los comandos para crear y usar la base de datos. Simplemente elimine la cuarta y la nueva quinta línea.

sed '4d' dump.sql | sed '5d' > dump-striped.sql 
+0

Es mejor mostrar las líneas para eliminar. Solo hay dos. El método que das es arbitrario, especialmente si el formato cambia o tiene otras ediciones manuales. – bshea

1

En las ventanas xampp que utiliza comandos siguientes para lograr este

exportación

mysqldump -u root -p mydb > mydb.sql 

importación

mysql -u root -p mynewdb < mydb.sql 
Cuestiones relacionadas