restaurar - mysqldump con crear línea de base de datos
respaldar base de datos mysql phpmyadmin (3)
Estoy en el proceso de mover mis archivos a otra computadora, y una cosa que me gustaría hacer es transferir los datos en mi base de datos MySQL. Quiero volcar las bases de datos en archivos .sql, pero también tengo la base de datos de creación db_name incluida en el archivo, de esa manera solo tengo que importar el archivo a mysql sin tener que crear manualmente las bases de datos. ¿Hay una manera de hacer eso?
Aquí está cómo hacer volcar la base de datos (con solo el esquema):
mysqldump -u root -p"passwd" --no-data --add-drop-database --databases my_db_name | sed ''s#/[*]!40000 DROP DATABASE IF EXISTS my_db_name;#'' >my_db_name.sql
Si también desea los datos, elimine la --no-data
.
La solución más simple es usar la opción -B o --databases. Luego aparece el comando CREAR base de datos en el archivo de salida. Por ejemplo:
mysqldump -uuser -ppassword -d -B --events --routines --triggers database_example > database_example.sql
Aquí hay un encabezado de archivo de volcado:
-- MySQL dump 10.13 Distrib 5.5.36-34.2, for Linux (x86_64)
--
-- Host: localhost Database: database_example
-- ------------------------------------------------------
-- Server version 5.5.36-34.2-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE=''+00:00'' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=''NO_AUTO_VALUE_ON_ZERO'' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `database_example`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `database_example` /*!40100 DEFAULT CHARACTER SET utf8 */;
Por defecto, mysqldump
siempre crea CREATE DATABASE IF NOT EXISTS db_name;
declaración al comienzo del archivo de volcado.
[ EDIT ] Algunas cosas sobre el archivo mysqldump
y sus opciones:
--all-databases
, -A
Vuelque todas las tablas en todas las bases de datos. Esto es lo mismo que usar la opción --databases
y nombrar todas las bases de datos en la línea de comando.
--add-drop-database
Agregue una declaración DROP DATABASE
antes de cada instrucción CREATE DATABASE
. Esta opción se usa generalmente junto con la opción --databases
--all-databases
o --databases
porque no se escriben sentencias CREATE DATABASE
menos que se especifique una de esas opciones.
--databases
, -B
Volcar varias bases de datos. Normalmente, mysqldump
trata el argumento del primer nombre en la línea de comando como un nombre de base de datos y los siguientes nombres como nombres de tabla. Con esta opción, trata todos los argumentos de nombres como nombres de bases de datos. CREATE DATABASE
y USE
se incluyen en el resultado antes de cada nueva base de datos.
--no-create-db
, -n
Esta opción suprime las CREATE DATABASE
que de lo contrario están incluidas en el resultado si se da la --databases
o --databases
--all-databases
.
Hace algún tiempo, hubo una pregunta similar preguntando sobre no tener tal declaración al principio del archivo (para el archivo XML). El enlace a esa pregunta está aquí .
Entonces para responder a tu pregunta:
- si tiene una base de datos para volcar, debe tener la
--add-drop-database
en su declaraciónmysqldump
. - si tiene que
--databases
varias bases de datos, debe usar la opción--databases
o--databases
--all-databases
y la sintaxisCREATE DATABASE
se agregará automáticamente
Más información en MySQL Reference Manual