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
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 vostromysqldump
dichiarazione. - se si dispone di più database per eseguire il dump, è necessario utilizzare l'opzione
--databases
o--all-databases
e la sintassiCREATE DATABASE
saranno aggiunti automaticamente
Maggiori informazioni su MySQL Reference Manual
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 */;
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
.
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
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
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