web-dev-qa-db-fra.com

mysqldump ne restaure pas la base de données. pourquoi pas?

Pourquoi mon opération de restauration ne fonctionne-t-elle pas?

J'ai créé un fichier de vidage pour une base de données en utilisant:

mysqldump -u root -p databasename > /home/databasename_bkup.sql  

J'ai ensuite ouvert le fichier de données et confirmé qu'il contient CREATE TABLE instructions pour chacune des tables de la base de données. J'ai donc supprimé la base de données et recréé une base de données vide du même nom avant d'exécuter la commande de restauration suivante:

mysqldump -u root -p databasename < /home/databasename_bkup.sql  

Cette commande de restauration a entraîné l'impression suivante dans le terminal:

-- MySQL dump 10.13  Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost    Database: databasename
-- ------------------------------------------------------
-- Server version   5.6.23

/*!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 */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2015-03-05 17:56:29

Mais ensuite, lorsque je me connecte à mysql pour vérifier le contenu de la base de données, j'ai découvert que la base de données est vide, comme suit:

mysql> use databasename;
Database changed
mysql> show tables;
Empty set (0.00 sec)

Alors pourquoi la base de données n'est-elle pas restaurée? Quelle syntaxe spécifique puis-je utiliser pour m'assurer que la base de données est correctement restaurée?

9
CodeMed

Vous devez utiliser le client mysql pour recharger

mysql -u root -p -Ddatabasename < /home/databasename_bkup.sql  

Une autre façon de recharger serait

mysql -u root -p -Ddatabasename

puis à partir de l'invite MySQL, faites cela

mysql> source /home/databasename_bkup.sql  

Si vous souhaitez que mysqldump disparaisse et recrée la base de données pour vous, créez le vidage comme ceci:

mysqldump -u root -p --add-drop-database -B databasename > /home/databasename_bkup.sql  

Ensuite, exécuter le script

mysql -u root -p < /home/databasename_bkup.sql  

le DROP DATABASE commande pour vous.

18
RolandoMySQLDBA

Fondamentalement, il existe une différence fondamentale entre la commande de sauvegarde et de restauration d'une base de données mysql sur les serveurs Linux

Pour effectuer une sauvegarde, nous devons utiliser une commande mysqldump comme celle-ci sur l'invite de commande

#mysqldump -u [username] -p[password] [databasename] > [backupfilename] 

mais lorsque vous souhaitez restaurer la même sauvegarde sur le serveur, vous devez écrire une commande comme celle-ci

#mysql -u [username] -p[password] [databasename] < [backupfilename] 

la plupart du temps, les gens utilisent la commande mysqldump pour restaurer les tables de la base de données, donc mysql n'est pas en mesure de créer des tables ou d'insérer des lignes

7
Rakesh Kumar

n'utilisez pas "mysqldump" lors de la restauration de la sauvegarde. Utilisez "mysql". mysqldump sert à prendre une sauvegarde, pas à restaurer.

4
Abhijeet