2013-05-09 17 views
36

Ich bin dabei, meine Dateien auf einen anderen Computer zu verschieben, und eine Sache, die ich tun möchte, ist, die Daten in meine MySQL-Datenbank zu übertragen. Ich möchte die Datenbanken in .sql-Dateien ablegen, habe aber auch die create dbbank db_name include in der Datei, so muss ich nur die Datei in mysql importieren, ohne die Datenbanken manuell erstellen zu müssen. Gibt es eine Möglichkeit, das zu tun?mysqldump mit Datenbankzeile erstellen

Antwort

48

Standardmäßig erstellt mysqldump immer die CREATE DATABASE IF NOT EXISTS db_name;-Anweisung am Anfang der Dump-Datei.

[EDIT] Ein paar Dinge über die mysqldump Datei und es ist Optionen:

--all-databases, -A

Dump alle Tabellen in allen Datenbanken. Dies entspricht der Verwendung der Option --databases und Benennung aller Datenbanken in der Befehlszeile.

--add-drop-database

eine DROP DATABASE Aussage vor jeder CREATE DATABASE Anweisung hinzufügen. Diese Option wird normalerweise in Verbindung mit der Option --all-databases oder --databases verwendet, da keine CREATE DATABASE Anweisungen geschrieben werden, es sei denn, eine dieser Optionen ist angegeben.

--databases, -B

Dump mehrere Datenbanken. Normalerweise behandelt mysqldump das Vornamenargument in der Befehlszeile als Datenbanknamen und folgende Namen als Tabellennamen. Mit dieser Option werden alle Namensargumente als Datenbanknamen behandelt. CREATE DATABASE und USE Anweisungen sind in der Ausgabe vor jeder neuen Datenbank enthalten.

--no-create-db, -n

Diese Option unterdrückt die CREATE DATABASE Aussagen, die sonst in der Ausgabe enthalten sind, wenn die --databases oder --all-databases Option gegeben ist.

Vor einiger Zeit gab es eine ähnliche Frage, die tatsächlich fragte, ob eine solche Anweisung am Anfang der Datei (für XML-Datei) fehlt. Link zu dieser Frage is here.

So Ihre Frage zu beantworten:

  • , wenn Sie eine Datenbank zu sichern, sollten Sie die --add-drop-database Option in Ihrer mysqldump Äußerung.
  • , wenn Sie mehrere Datenbanken dumpen haben, können Sie die Option --databases oder --all-databases und die CREATE DATABASE Syntax automatisch hinzugefügt werden
  • Die einfachste Lösung ist die Verwendung Option sollte

Weitere Informationen unter MySQL Reference Manual

+1

Das ist, was mit mir passiert ist. Ich habe weder --databases noch --all-databases benutzt. Ich lege einfach den Datenbanknamen, der die Drop-Datenbank nicht erstellen würde, wenn vorhanden, und Datenbankzeile erstellen. – Vince

+0

Ja, dann, im Falle einer Datenbank, fügen Sie die '--add-drop-database' Option hinzu und alles sollte in Ordnung sein. Beachten Sie jedoch, dass beim Import der Dump-Datei diese Datenbank und alles, was darin enthalten ist, tatsächlich gelöscht wird, sofern dies auf dem Computer vorhanden ist. – GregD

+3

Für welche Version war das? mysqldump Ver 10.11 Distrib 5.0.51a, für debian-linux-gnu (i486) mysqldump --add-drop-database test | grep DROP gibt nur DROP TABLE-Zeilen für die Testdatenbank aus. Ich muss --databases addieren, bevor ich einen auskommentierten DROP DATABASE IF EXISTS 'test' bekomme – jla

7

-B oder --databases.Then CREATE Datenbankbefehl erscheint in der Ausgabedatei. Zum Beispiel:

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

Hier ist ein Header dumpfile:

-- 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

Hier ist, wie die Datenbank zu tun Dump (nur mit dem 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 

Wenn Sie auch wollen die Daten, entfernen Sie die Option --no-data.