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?
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:
--add-drop-database
dans votre instruction mysqldump
.--databases
ou --all-databases
et la syntaxe CREATE DATABASE
sera ajoutée automatiquement.Plus d'informations sur Manuel de référence MySQL
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 */;
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
.