mysqldump stellt die Datenbank nicht wieder her. warum nicht?


9

Warum funktioniert mein Wiederherstellungsvorgang nicht?

Ich habe ein Dumpfile für eine Datenbank erstellt mit:

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

Ich habe dann das Dumfile geöffnet und bestätigt, dass es CREATE TABLEAnweisungen für jede der Tabellen in der Datenbank enthält. Also habe ich die Datenbank gelöscht und eine leere Datenbank mit demselben Namen neu erstellt, bevor ich den folgenden Wiederherstellungsbefehl ausgeführt habe:

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

Dieser Wiederherstellungsbefehl führte zu folgendem Druck im 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

Als ich mich dann bei MySQL anmeldete, um den Inhalt der Datenbank zu überprüfen, stellte ich fest, dass die Datenbank wie folgt leer ist:

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

Warum wird die Datenbank nicht wiederhergestellt? Welche spezifische Syntax kann ich verwenden, um sicherzustellen, dass die Datenbank ordnungsgemäß wiederhergestellt wird?

Antworten:


18

Sie müssen den MySQL-Client zum Neuladen verwenden

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

Ein anderer Weg zum Nachladen wäre

mysql -u root -p -Ddatabasename

Führen Sie dies an der MySQL-Eingabeaufforderung aus

mysql> source /home/databasename_bkup.sql  

Wenn Sie möchten, dass der mysqldump die Datenbank für Sie löscht und neu erstellt, erstellen Sie den Speicherauszug wie folgt:

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

Führen Sie dann das Skript aus

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

erledigt den DROP DATABASEBefehl für Sie.


7

Grundsätzlich gibt es einen grundlegenden Unterschied zwischen dem Befehl zum Sichern und Wiederherstellen einer MySQL-Datenbank auf Linux-Servern

Um ein Backup zu erstellen, müssen Sie einen solchen Befehl mysqldumpan der Eingabeaufforderung verwenden

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

Wenn Sie jedoch dieselbe Sicherung auf dem Server wiederherstellen möchten, sollten Sie einen Befehl wie diesen schreiben

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

Meistens verwenden Benutzer den Befehl mysqldump, um die Datenbanktabellen wiederherzustellen, sodass mysql keine Tabellen erstellen oder Zeilen einfügen kann


4

Verwenden Sie "mysqldump" nicht, während Sie das Backup wiederherstellen. Verwenden Sie "mysql". mysqldump dient zum Erstellen von Backups und nicht zum Wiederherstellen.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.