2013-05-09 10 views
36

Sono in procinto di spostare i miei file su un altro computer, e una cosa che vorrei fare è trasferire i dati nel mio database MySQL. Voglio scaricare i database in file .sql, ma ho anche creato il database nome_db incluso nel file, in questo modo devo solo importare il file in mysql senza dover creare manualmente i database. C'è un modo per farlo?mysqldump con create database line

risposta

48

Per impostazione predefinita, mysqldump crea sempre l'istruzione CREATE DATABASE IF NOT EXISTS db_name; all'inizio del file di dettagli.

[EDIT ] alcune cose circa il file mysqldump e si tratta di opzioni:

--all-databases, -A

Dump tutte le tabelle in tutti i database. È lo stesso dell'utilizzo dell'opzione --databases e della denominazione di tutti i database sulla riga di comando.

--add-drop-database

Aggiungi una dichiarazione DROP DATABASE prima di ogni CREATE DATABASE affermazione. Questa opzione viene in genere utilizzata in combinazione con l'opzione --all-databases o --databases perché non sono state scritte istruzioni CREATE DATABASE a meno che non venga specificata una di queste opzioni.

--databases, -B

Dump diversi database. Normalmente, mysqldump considera l'argomento del primo nome sulla riga di comando come nome del database e i seguenti nomi come nomi di tabelle. Con questa opzione, tratta tutti gli argomenti del nome come nomi di database. Le dichiarazioni CREATE DATABASE e USE sono incluse nell'output prima di ogni nuovo database.

--no-create-db, -n

Questa opzione sopprime le CREATE DATABASE dichiarazioni che sono altrimenti inclusi nell'output se l'opzione --databases o --all-databases è dato.

Qualche tempo fa, c'era una domanda simile che in realtà chiedeva di non avere tale istruzione all'inizio del file (per file XML). Link a questa domanda is here.

Quindi, per rispondere alla tua domanda:

  • se si dispone di un database di discarica, si dovrebbe avere la possibilità --add-drop-database nel vostro mysqldump dichiarazione.
  • se si dispone di più database per eseguire il dump, è necessario utilizzare l'opzione --databases o --all-databases e la sintassi CREATE DATABASE saranno aggiunti automaticamente

Maggiori informazioni su MySQL Reference Manual

+1

Questo è quello che stava succedendo con me. Non stavo usando - database o - tutti-database. Ho appena inserito il nome del database, che non creerebbe il drop database se esiste e crea una linea di database. – Vince

+0

Sì, quindi nel caso di un database, aggiungere l'opzione '--add-drop-database' e ​​tutto dovrebbe andare bene. Ricorda però che l'importazione del file dump in realtà farà cadere quel database e tutto ciò che è incluso, se tale è presente nel computer. – GregD

+3

Per quale versione? mysqldump Ver 10.11 Distrib 5.0.51a, per debian-linux-gnu (i486) mysqldump --add-drop-database test | grep DROP emette solo linee DROP TABLE per il database di test. Devo aggiungere - database prima di ottenere un commento DROP DATABASE IF EXISTS 'test' – jla

7

La soluzione più semplice è quella di utilizzare l'opzione -B o --databases.Poi il comando CREATE database appare nel file di output. Per esempio:

mysqldump -uuser -ppassword -d -B --events --routines --triggers database_example > database_example.sql 

Ecco colpo di testa di un file di dump:

-- 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 @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 
/*!40103 SET @[email protected]@TIME_ZONE */; 
/*!40103 SET TIME_ZONE='+00:00' */; 
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; 

-- 
-- Current Database: `database_example` 
-- 

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `database_example` /*!40100 DEFAULT CHARACTER SET utf8 */; 
0

Ecco come fare il dump del database (con il solo schema):

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 

Se anche voi volete i dati, rimuovere l'opzione --no-data.