2010-02-26 12 views
52

¿Es posible importar una única base de datos de un mysqldump de todas las bases de datos? Supongo que puedo modificar el archivo manualmente, pero me pregunto si hay alguna opción de línea de comando para hacer esto.Importar base de datos única desde --todo el volcado de bases de datos

Estoy moviendo servidores y tengo muchas bases de datos, la mayoría de las cuales actualmente no necesito o no quiero en este momento pero me gustaría tener la opción de restaurar una sola si fuera necesario.

Respuesta

70

mysqldump salida es solo un conjunto de declaraciones SQL.

le puede proporcionar la base de datos que desee en la línea de comandos y omitir los comandos contra las otras bases de datos usando:

mysql -D mydatabase -o < dump.sql 

Esto sólo ejecutará los comandos cuando mydatabase está en uso

+0

Gracias por la rápida respuesta! Increíble. – savageguy

+2

Muy útil para mí, ¡Gracias! puede agregar --deshabilitar claves para evitar errores de claves extranjeras;) mysql -u usuario -D - base de datos de claves inactivas -o davidselo

+15

Esta es una respuesta muy imprudente e increíblemente peligrosa. Si ejecuta 'mysqldump --all-databases', el resultado de mysqldump contendrá' DROP DATABASE IF EXISTS dbname; CREATE DATABASE dbname; USE dbname; 'para cada base de datos en la instancia de MySQL, incluido el esquema de mysql. Consulte la documentación de mysqldump: http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html#option_mysqldump_all-databases. Eso significa que cada base de datos se sobrescribirá sin piedad. ¿Puede proporcionar una prueba de que omitirá toda la base de datos excepto una? NOTA: Puede hacer esto en los registros binarios utilizando mysqlbinlog. – RolandoMySQLDBA

48

Puede utilizar el siguiente comando:

mysql -u root -p --one-database destdbname < alldatabases.sql 

Dónde destdbname es su base de datos deseada que desea restaurar.

Otra opción que es en mi humilde opinión mucho más segura, es extraer el DB de un volcado --all-databases. Ejemplo:

sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' alldatabases.sql > output.sql 

Reemplazar dbname con el nombre de base de datos deseada. alldatabases.sql es el nombre de su archivo sql-dump. De esta forma, tendrá el DB separado en el archivo, y luego podrá restaurar utilizando un simple comando mysql.

Buena suerte

(Créditos va a Darren Mothersele - ver his page)

+2

¡Gran solución! Dicho esto, tuve que agregar el encabezado de volcado original para evitar algunos errores ... – neuro

Cuestiones relacionadas