web-dev-qa-db-fra.com

mysqldump avec la ligne de création de base de données

Je suis en train de transférer mes fichiers sur un autre ordinateur et j'aimerais, entre autres, transférer les données de ma base de données MySQL. Je souhaite vider les bases de données dans des fichiers .sql, mais aussi créer la base de données create nom_base, ce qui me permet d'importer le fichier dans mysql sans devoir créer manuellement les bases de données. Y-a-t-il un moyen de faire ça?

42
Vince

Par défaut, mysqldump crée toujours l'instruction CREATE DATABASE IF NOT EXISTS db_name; au début du fichier de vidage.

[EDIT] Peu de choses sur le fichier mysqldump et ses options:

--all-databases, -A

Vide toutes les tables de toutes les bases de données. Cela revient à utiliser l'option --databases et à nommer toutes les bases de données sur la ligne de commande.

--add-drop-database

Ajoutez une instruction DROP DATABASE avant chaque instruction CREATE DATABASE. Cette option est généralement utilisée avec les options --all-databases ou --databases car aucune instruction CREATE DATABASE n'est écrite à moins qu'une de ces options ne soit spécifiée.

--databases, -B

Vider plusieurs bases de données. Normalement, mysqldump traite l'argument du premier nom sur la ligne de commande en tant que nom de base de données et les noms suivants en tant que noms de tables. Avec cette option, tous les arguments de nom sont traités comme des noms de base de données. Les instructions CREATE DATABASE et USE sont incluses dans la sortie avant chaque nouvelle base de données.

--no-create-db, -n

Cette option supprime les instructions CREATE DATABASE qui sont par ailleurs incluses dans la sortie si l'option --databases ou --all-databases est donnée.

Il y a quelque temps, il y avait une question similaire qui demandait de ne pas avoir une telle déclaration au début du fichier (pour un fichier XML). Lien vers cette question est ici .

Donc, pour répondre à votre question:

  • si vous avez une base de données à vider, vous devriez avoir l’option --add-drop-database dans votre instruction mysqldump.
  • si vous avez plusieurs bases de données à vider, vous devez utiliser l'option --databases ou --all-databases et la syntaxe CREATE DATABASE sera ajoutée automatiquement.

Plus d'informations sur Manuel de référence MySQL

56
GregD

La solution la plus simple consiste à utiliser l'option -B ou --databases.La commande CREATE database apparaît alors dans le fichier de sortie . Par exemple:

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

Voici l'en-tête d'un fichier de vidage:

-- 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 */;
13
Baruch Lvovsky

Voici comment vider la base de données (avec seulement le schéma):

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 vous souhaitez également les données, supprimez l'option --no-data.

0
linuxaos