MySQL ist ein relationales Open-Source-Datenbankmanagementsystem (DBMS), das häufig in einer Vielzahl von Kontexten eingesetzt wird. Am häufigsten wird es als Teil des LAMP-Stacks eingesetzt. Das Datenbanksystem ist außerdem einfach zu bedienen und sehr portabel und im Kontext vieler Anwendungen äußerst effizient. Da MySQL oft ein zentraler Datenspeicher für große Mengen unternehmenskritischer Daten ist, ist das Erstellen regelmäßiger Backups Ihrer MySQL-Datenbank eine der wichtigsten Disaster-Recovery-Aufgaben, die ein Systemadministrator ausführen kann. Dieser Leitfaden befasst sich mit einer Reihe unterschiedlicher Methoden zum Erstellen von Sicherungskopien Ihrer Datenbank sowie zum Wiederherstellen von Datenbanken aus Sicherungskopien.
Bevor Sie mit dem Installationsprozess beginnen, gehen wir davon aus, dass Sie die in unserem Einrichten und Sichern einer Compute-Instanz beschriebenen Schritte befolgt haben. Zusätzlich müssen Sie die MySQL-Datenbank installieren. Die gesamte Konfiguration wird in einer Terminalsitzung durchgeführt; Stellen Sie sicher, dass Sie über SSH als root bei Ihrem Linode angemeldet sind. Wenn Sie neu in der Linux-Serververwaltung sind, interessieren Sie sich vielleicht für unsere Einführung in die Linux-Konzepte, den Leitfaden für Anfänger und den Leitfaden zu den Grundlagen der Verwaltung.
Backup-Methodik
Die meisten Sicherungen von MySQL-Datenbanken in diesem Handbuch werden mit mysqldump
durchgeführt Tool, das mit der Standardinstallation des MySQL-Servers verteilt wird. Wir empfehlen die Verwendung von mysqldump
wann immer möglich, da dies oft der einfachste und effizienteste Weg ist, Datenbanksicherungen zu erstellen. Andere in diesem Handbuch beschriebene Methoden werden für Situationen bereitgestellt, in denen Sie keinen Zugriff auf mysqldump
haben Tool, wie in einer Wiederherstellungsumgebung wie Finnix oder in Situationen, in denen die lokale Instanz des MySQL-Servers nicht startet.
Trotzdem bietet diese Anleitung nur einen Überblick über mysqldump
Tool, da es viele Optionen und Verwendungsmöglichkeiten für mysqldump
gibt die über den Rahmen dieses Dokuments hinausgehen. Wir empfehlen Ihnen, sich mit allen in diesem Dokument behandelten Verfahren vertraut zu machen und Ihre Erkundung von mysqldump
fortzusetzen über die hier beschriebenen Fälle hinaus. Beachten Sie unbedingt Folgendes:
- Der
*.sql
Dateien, die mitmysqldump
erstellt wurden kann jederzeit wiederhergestellt werden. Sie können sogar die Datenbank.sql
bearbeiten Dateien manuell (mit großer Sorgfalt!) mit Ihrem bevorzugten Texteditor. - Wenn Ihre Datenbanken nur die MyISAM-Speicher-Engine verwenden, können Sie sie durch
mysqldump
ersetzen Befehl mit dem schnellerenmysqlhotcopy
.
Erstellen von Sicherungen des gesamten Datenbankmanagementsystems (DBMS)
Es ist oft notwendig, ein Backup (oder einen „Dump“) eines gesamten Datenbankverwaltungssystems zusammen mit allen Datenbanken und Tabellen zu erstellen, einschließlich der Systemdatenbanken, die die Benutzer, Berechtigungen und Passwörter enthalten.
Option 1:Erstellen Sie Sicherungen eines gesamten Datenbankverwaltungssystems mit dem mysqldump-Dienstprogramm
Die einfachste Methode zum Erstellen eines einzigen kohärenten Backups des gesamten MySQL-Datenbankverwaltungssystems verwendet mysqldump
Dienstprogramm über die Befehlszeile. Die Syntax zum Erstellen eines Datenbank-Dumps mit aktuellem Zeitstempel lautet wie folgt:
mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -p
Dieser Befehl fordert Sie zur Eingabe eines Kennworts auf, bevor Sie mit der Datenbanksicherung im aktuellen Verzeichnis beginnen. Dieser Vorgang kann je nach Größe Ihrer Datenbanken zwischen einigen Sekunden und einigen Stunden dauern.
Automatisieren Sie diesen Vorgang, indem Sie crontab
eine Zeile hinzufügen :
0 1 * * * /usr/bin/mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -pPASSWORD
Verwenden Sie für das obige Beispiel which mysqldump
um den korrekten Pfad zum Befehl zu bestätigen, und ersetzen Sie root
mit dem mysql-Benutzer, unter dem Sie Backups ausführen möchten, und PASSWORD
mit dem richtigen Passwort für diesen Benutzer.
Hinweis Stellen Sie im crontab-Beispiel sicher, dass zwischen dem Flag -P und Ihrer Passworteingabe kein Leerzeichen steht.
Option 2:Erstellen Sie Backups eines gesamten DBMS unter Verwendung von Kopien des MySQL-Datenverzeichnisses
Während der mysqldump
Tool die bevorzugte Sicherungsmethode ist, gibt es einige Fälle, die einen anderen Ansatz erfordern. mysqldump
funktioniert nur, wenn auf den Datenbankserver zugegriffen werden kann und er läuft. Wenn die Datenbank nicht gestartet werden kann oder das Hostsystem nicht erreichbar ist, können wir die Datenbank von MySQL direkt kopieren. Diese Methode ist häufig in Situationen erforderlich, in denen Sie nur Zugriff auf eine Wiederherstellungsumgebung wie Finnix haben, wenn die Festplatten Ihres Systems in diesem Dateisystem gemountet sind. Wenn Sie diese Methode auf Ihrem System selbst versuchen, stellen Sie sicher, dass die Datenbank nicht ist Betrieb. Geben Sie einen Befehl aus, der dem folgenden ähnelt:
/etc/init.d/mysqld stop
Bei den meisten Distributionsversionen von MySQL befindet sich das Datenverzeichnis im Verzeichnis /var/lib/mysql/
Verzeichnis. Wenn dieses Verzeichnis nicht existiert, prüfen Sie /etc/mysql/my.cnf
Datei für einen Pfad zum Datenverzeichnis. Alternativ können Sie Ihr Dateisystem nach dem Datenverzeichnis durchsuchen, indem Sie den folgenden Befehl eingeben:
find / -name mysql
Sobald Sie Ihr MySQL-Datenverzeichnis gefunden haben, können Sie es an einen Sicherungsort kopieren. Das folgende Beispiel geht davon aus, dass sich das MySQL-Datenverzeichnis unter /var/lib/mysql/
befindet :
cp -R /var/lib/mysql/* /opt/database/backup-1266871069/
In diesem Fall haben wir den Inhalt des Datenverzeichnisses rekursiv kopiert (z. B. /var/lib/mysql/
) in ein Verzeichnis innerhalb von /opt/
Hierarchie (z. B. /opt/database/backup-1266871069/
). Dieses Verzeichnis muss vorhanden sein, bevor der Kopiervorgang gestartet wird. Betrachten Sie die folgende Abfolge von Operationen:
/etc/init.d/mysql stop
mkdir -p /opt/database/backup-1266872202/
cp -R /var/lib/mysql/* /opt/database/backup-1266872202/
Diese Befehle beginnen damit, den MySQL-Server-Daemon zu stoppen und dann ein Verzeichnis mit dem Namen /opt/database/backup-1266872202/
zu erstellen , und Durchführen einer rekursiven Kopie des Datenverzeichnisses. Beachten Sie, dass wir uns für die Verwendung von backup-[time_t]
entschieden haben Namenskonvention für unsere Beispiele. Ersetzen Sie die obigen Pfade durch Ihre bevorzugte Organisation und Ihr bevorzugtes Benennungsschema. Der cp
Der Befehl erzeugt keine Ausgabe und kann je nach Größe Ihrer Datenbank einige Zeit in Anspruch nehmen. Seien Sie nicht beunruhigt, wenn die Fertigstellung eine Weile dauert. Wenn der Kopiervorgang abgeschlossen ist, möchten Sie das Datenverzeichnis möglicherweise in einem „tar“-Archiv archivieren, um es einfacher zu verwalten und zwischen Computern zu verschieben. Führen Sie die folgenden Befehle aus, um das Archiv zu erstellen:
cd /opt/database/backup-1266872202
tar -czfv * > /opt/mysqlBackup-1266872202.tar.gz
Sobald der Tarball erstellt ist, können Sie die Datei einfach so übertragen, wie es für Sie am bequemsten ist. Vergessen Sie nicht, den MySQL-Server-Daemon bei Bedarf erneut zu starten:
/etc/init.d/mysql start
Erstellen von Backups einer einzelnen Datenbank
In vielen Fällen ist es nicht erforderlich, ein Backup des gesamten Datenbankservers zu erstellen. In einigen Fällen, z. B. beim Upgrade einer Webanwendung, empfiehlt das Installationsprogramm möglicherweise, eine Sicherungskopie der Datenbank zu erstellen, falls sich das Upgrade negativ auf die Datenbank auswirkt. Wenn Sie auf ähnliche Weise einen „Dump“ einer bestimmten Datenbank erstellen möchten, um diese Datenbank auf einen anderen Server zu verschieben, können Sie die folgende Methode in Betracht ziehen.
Verwenden Sie nach Möglichkeit mysqldump
Tool zum Exportieren eines „Dumps“ einer einzelnen Datenbank. Dieser Befehl sieht wie folgt aus:
mysqldump -u username -ps3cr1t -h localhost danceLeaders > 1266861650-danceLeaders.sql
Das obige Beispiel ist wie das Beispiel im vorherigen Abschnitt, außer dass --all-databases
nicht verwendet wird Option gibt dieses Beispiel einen bestimmten Datenbanknamen an. In diesem Fall erstellen wir ein Backup der danceLeaders
Datenbank. Die Form dieses Befehls ist in einer einfacheren Schreibweise wie folgt:
mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql
Als weiteres Beispiel sichern wir die Datenbank mit dem Namen customer
Verwenden Sie das Root-Datenbankkonto, indem Sie den folgenden Befehl ausgeben:
mysqldump -u root -p -h localhost customer > customerBackup.sql
Sie werden vor mysqldump
nach einem Passwort gefragt beginnt mit dem Backup-Prozess. Wie immer die Sicherungsdatei, in diesem Fall customerBackup.sql
, wird in dem Verzeichnis erstellt, in dem Sie diesen Befehl eingeben. Der mysqldump
Der Befehl kann je nach Größe der Datenbank und Belastung des Hosts beim Ausführen der Sicherung in wenigen Sekunden oder Stunden abgeschlossen werden.
Erstellen von Backups einer einzelnen Tabelle
Option 1:Erstellen Sie Backups einer einzelnen Tabelle mit dem mysqldump-Dienstprogramm
Diese Operation, wie frühere Verwendungen von mysqldump
Dienstprogramm in diesem Dokument ermöglicht es Ihnen, eine Sicherung einer einzelnen Datenbanktabelle zu erstellen. In Fortsetzung unserer früheren Beispiele erlaubt Ihnen das folgende Beispiel, die Tabelle usernameRecords
zu sichern in den danceLeaders
Datenbank.
mysqldump -u username -ps3cr1t -h localhost danceLeaders usernameRecords \> 1266861650-danceLeaders-usernameRecords.sql
Das obige Beispiel ist wie das Beispiel im vorherigen Abschnitt, außer dass wir dem Befehl eine Tabellennamensspezifikation hinzugefügt haben, um den Namen der Tabelle anzugeben, die wir sichern möchten. Die Form dieses Befehls in einer einfacheren Schreibweise lautet wie folgt:
mysqldump -u [username] -p[password] -h [host] [databaseName] [tableName] > [backup-name].sql
Als weiteres Beispiel sichern wir die Tabelle mit dem Namen „Bestellung“ aus der Datenbank mit dem Namen customer
Verwenden Sie das Root-Datenbankkonto, indem Sie den folgenden Befehl ausgeben:
mysqldump -u root -p -h localhost customer order > customerBackup-order.sql
Sie werden vor mysqldump
nach einem Passwort gefragt beginnt mit dem Sicherungsvorgang. Die Sicherungsdatei (in diesem Fall customerBackup.sql
) wird in dem Verzeichnis erstellt, in dem Sie diesen Befehl eingeben. Der mysqldump
Der Befehl kann je nach Größe der Datenbank und Belastung des Hosts beim Ausführen der Sicherung in wenigen Sekunden oder Stunden abgeschlossen werden.
Option 2:Erstellen Sie Backups einer einzelnen Tabelle mit dem MySQL-Client und eine OUTFILE-Anweisung
Der MySQL-Client selbst hat einige Sicherungsfunktionen. Dies ist nützlich, wenn Sie bereits angemeldet sind und die aktuelle Sitzung nicht verlassen möchten. Wenn Sie ein Live-System verwenden und sich keine Ausfallzeit leisten können, sollten Sie erwägen, die zu sichernde Tabelle vorübergehend zu sperren.
Beachten Sie, dass beim Sichern einer einzelnen Tabelle mit dem MySQL-Client die Struktur dieser Tabelle nicht in der Sicherung beibehalten wird. Bei dieser Methode werden nur die Daten selbst gespeichert.
-
Bevor wir beginnen, empfehlen wir die Durchführung eines
LOCK TABLES
auf den Tabellen, die Sie sichern möchten, gefolgt vonFLUSH TABLES
um sicherzustellen, dass sich die Datenbank während des Sicherungsvorgangs in einem konsistenten Bereich befindet. Sie benötigen lediglich eine Lesesperre. Dadurch können andere Clients weiterhin die Tabellen abfragen, während Sie eine Kopie der Dateien im MySQL-Datenverzeichnis erstellen. Für eine „Lese“-Sperre die Syntax vonLOCK TABLES
sieht wie folgt aus:1
LOCK TABLES tableName READ;
Um ein
LOCK TABLES
durchzuführen auf dieorder
Tabelle descustomer
Datenbank, geben Sie den folgenden Befehl ein:mysql -u root -p -h localhost
Sie werden dann nach dem Root-Passwort gefragt. Nachdem Sie die Anmeldeinformationen für die Datenbank eingegeben haben, gelangen Sie zur Eingabeaufforderung des mysql-Clients. Geben Sie den folgenden Befehl aus, um die
order
zu sperren Tabelle imcustomer
Datenbank (das nachgestellte;
wird für MySQL-Befehle benötigt):1 2 3
USE customer; LOCK TABLES order READ; FLUSH TABLES;
-
Wir können jetzt mit dem Sicherungsvorgang beginnen. Um mit dem MySQL-Client ein Backup einer einzelnen Tabelle zu erstellen, müssen Sie bei Ihrem MySQL-DBMS angemeldet sein. Wenn Sie derzeit nicht angemeldet sind, können Sie sich mit dem folgenden Befehl anmelden:
mysql -u root -p -h localhost
Sie werden nach einem Passwort gefragt. Sobald Sie das richtige Passwort eingegeben haben und sich an der Eingabeaufforderung des MySQL-Clients befinden, können Sie ein
SELECT * INTO OUTFILE
verwenden Erklärung. Die Syntax dieser Anweisung sieht wie folgt aus:1
SELECT * INTO OUTFILE 'file_name' FROM tbl_name;
In diesem Beispiel erstellen wir eine Sicherungskopie der Daten aus der
order
Tabelle descustomer
Datenbank. Geben Sie den folgenden Befehl aus, um den Sicherungsvorgang zu starten (der abschließende;
wird für MySQL-Befehle benötigt):1 2 3 4 5
USE customer; LOCK TABLES order READ; FLUSH TABLES; SELECT * INTO OUTFILE 'customerOrderBackup.sql' FROM order; UNLOCK TABLES;
Die
customerOrderBackup.sql
Die Datei wird im entsprechenden Datenunterverzeichnis im Datenverzeichnis von MySQL erstellt. Das MySQL-Datenverzeichnis ist üblicherweise/var/lib/mysql/
. In diesem Beispiel dasOUTFILE
wird/var/lib/mysql/customer/customerOrderBackup.sql
sein . Der Speicherort dieses Verzeichnisses und dieser Datei kann jedoch zwischen Linux-Distributionen variieren. Wenn Sie Ihre Sicherungsdatei nicht finden können, können Sie sie mit dem folgenden Befehl suchen:find / -name customerOrderBackup.sql
-
Sobald Sie den Sicherungsvorgang abgeschlossen haben, sollten Sie die Tabellen mit dem folgenden Befehl im MySQL-Client entsperren. Dadurch wird Ihre Datenbank wieder in den normalen Betrieb versetzt. Melden Sie sich mit dem ersten Befehl beim MySQL-Client an, wenn Sie derzeit nicht angemeldet sind, und geben Sie dann den zweiten Befehl ein:
mysql -uroot -p -h localhost
1
UNLOCK TABLES;
Ab diesem Zeitpunkt können Sie Ihre Datenbank ganz normal weiterverwenden.
Überlegungen zu einer effektiven Backup-Strategie
Das Erstellen von Backups Ihrer MySQL-Datenbank sollte eine regelmäßige und geplante Aufgabe sein. Vielleicht möchten Sie regelmäßige Sicherungen mit cron
planen , mysqldump
und/oder mail
. Weitere Informationen zu Cron finden Sie in unserer Dokumentation. Die Implementierung einer automatisierten Sicherungslösung kann dazu beitragen, die Ausfallzeit in einer Notfallwiederherstellungssituation zu minimieren.
Sie müssen sich beim Sichern von Datenbanken nicht als Root anmelden. Ein MySQL-Benutzer mit Lesezugriff (z. B. SELECT
)-Berechtigung kann sowohl die mysqldump
und mysql
(z. B. der MySQL-Client) Tools zum Erstellen von Backups, wie unten beschrieben. Als allgemeine Praxis empfehlen wir, dass Sie nicht das MySQL-root
verwenden Benutzer wann immer möglich, um Sicherheitsrisiken zu minimieren.
Sie können inkrementelle Backups als Teil eines langfristigen Datenbank-Backup-Plans in Erwägung ziehen. Obwohl dieser Vorgang hier nicht behandelt wird, empfehlen wir Ihnen, die Ressource MySQL-Datenbank-Sicherungsmethoden für weitere Informationen in Betracht zu ziehen.
Ein komplettes DBMS aus einer Sicherung wiederherstellen
Ein Backup, das nicht wiederhergestellt werden kann, ist von minimalem Wert. Wir empfehlen, Ihre Backups regelmäßig zu testen, um sicherzustellen, dass sie wiederhergestellt werden können, falls Sie möglicherweise aus Backups wiederherstellen müssen. Wenn Sie Backups Ihrer MySQL-Datenbank wiederherstellen, hängt die von Ihnen verwendete Methode von der Methode ab, mit der Sie das betreffende Backup erstellt haben.
Option 1:Wiederherstellen eines gesamten DBMS mit dem MySQL-Client und von mysqldump erstellten Backups
Bevor Sie mit dem Wiederherstellungsprozess beginnen, wird in diesem Abschnitt davon ausgegangen, dass auf Ihrem System eine neu installierte Version von MySQL ohne vorhandene Datenbanken oder Tabellen ausgeführt wird. Wenn Sie bereits Datenbanken und Tabellen in Ihrem MySQL-DBMS haben, erstellen Sie bitte eine Sicherungskopie, bevor Sie fortfahren, da dieser Vorgang aktuelle MySQL-Daten überschreibt.
Mit mysql
können Sie ganz einfach Ihr gesamtes DBMS wiederherstellen Befehl. Die Syntax dafür sieht wie folgt aus:
mysql -u [username] -p [password] < backupFile.sql
In diesem Fall stellen wir einfach das gesamte DBMS wieder her. Der Befehl sieht wie folgt aus:
mysql -u root -p < 1266861650-backup-all.sql
Sie werden nach dem Passwort des Root-MySQL-Benutzers gefragt. Sobald die richtigen Anmeldeinformationen eingegeben wurden, beginnt der Wiederherstellungsprozess. Da dieser Vorgang ein komplettes DBMS wiederherstellt, kann er einige Sekunden bis zu vielen Stunden dauern.
Option 2:Wiederherstellen eines gesamten DBMS unter Verwendung von direkt kopierten MySQL-Datendateien Das Datenverzeichnis von MySQL
Bevor Sie mit dem Wiederherstellungsprozess beginnen, wird in diesem Abschnitt davon ausgegangen, dass auf Ihrem System eine neu installierte Version von MySQL ohne vorhandene Datenbanken oder Tabellen ausgeführt wird. Wenn Sie bereits Datenbanken und Tabellen in Ihrem MySQL-DBMS haben, erstellen Sie bitte eine Sicherungskopie, bevor Sie fortfahren, da dieser Vorgang aktuelle MySQL-Daten überschreibt.
-
Wenn Sie eine vollständige Sicherung Ihres MySQL-Datenverzeichnisses haben (üblicherweise
/var/lib/mysql
), können Sie es über die Befehlszeile wiederherstellen. Um eine erfolgreiche Wiederherstellung sicherzustellen, müssen Sie zuerst den MySQL-Server-Daemon stoppen und die aktuellen Daten im MySQL-Datenverzeichnis löschen./etc/init.d/mysql stop rm -R /var/lib/mysql/*
-
Im folgenden Beispiel befindet sich die Sicherung des MySQL-Datenverzeichnisses in
/opt/database/backup-1266872202
Verzeichnis. Wenn Sie beim Sichern Ihres DBMS-Datenverzeichnisses einen Tarball des Datenverzeichnisses erstellt haben, müssen Sie die Dateien vor dem Kopieren mit den folgenden Befehlen aus dem Tarball extrahieren:cp mysqlBackup-1266872202.tar.gz /var/lib/mysql/ cd /var/lib/mysql tar xzvf mysqlBackup-1266872202.tar.gz
-
Bevor wir den MySQL-Datenbankprozess neu starten können, müssen wir sicherstellen, dass die Berechtigungen für
/var/lib/mysql/
richtig eingestellt sind Verzeichnis. Für dieses Beispiel nehmen wir an, dass der MySQL-Server-Daemon als Benutzermysql
läuft mit der Gruppemysql
. Geben Sie den folgenden Befehl ein, um die Berechtigungen für das Datenverzeichnis zu ändern:chown -R mysql:mysql /var/lib/mysql
-
Ändern Sie
mysql:mysql
Teil dieses Befehls, wenn Ihre MySQL-Instanz mit unterschiedlichen Benutzer- und Gruppenberechtigungen ausgeführt wird. Die Form dieses Arguments ist[user]:[group]
. Schließlich können wir den MySQL-Server-Daemon mit dem folgenden Befehl starten:/etc/init.d/mysql start
Wenn Sie eine Fehlermeldung ähnlich der folgenden erhalten:
/usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
Sie müssen das alte
debian-sys-maint
finden Benutzerpasswort in/etc/mysql/debian.cnf
und ändern Sie dann den neuendebian-sys-maint
Benutzerpasswort dazu. Sie können das alte Passwort mitcat
anzeigen :cat /etc/mysql/debian.cnf | grep password
Kopieren (oder merken) Sie sich das Passwort. Dann müssen Sie den neuen
debian-sys-maint
ändern das Passwort des Benutzers. Sie können dies tun, indem Sie sich als MySQL-Root-Benutzer anmelden und den folgenden Befehl ausführen (wobeidas Passwort des alten debian-sys-maint
ist Benutzer):1
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;
-
Anschließend müssen Sie MySQL mit dem folgenden Befehl neu starten:
/etc/init.d/mysql restart
Nachdem der MySQL-Server erfolgreich gestartet wurde, sollten Sie Ihr MySQL-DBMS testen und sicherstellen, dass alle Datenbanken und Tabellen ordnungsgemäß wiederhergestellt wurden. Wir empfehlen außerdem, dass Sie Ihre Protokolle auf potenzielle Fehler prüfen. In manchen Fällen kann MySQL trotz Datenbankfehlern erfolgreich starten.
Wiederherstellen einer einzelnen Datenbank aus einer Sicherung
In Fällen, in denen Sie nur eine Sicherung für eine Datenbank erstellt haben oder nur eine einzelne Datenbank wiederherstellen müssen, ist der Wiederherstellungsprozess etwas anders.
Bevor Sie mit dem Wiederherstellungsprozess beginnen, wird in diesem Abschnitt davon ausgegangen, dass auf Ihrem System eine neu installierte Version von MySQL ohne vorhandene Datenbanken oder Tabellen ausgeführt wird. Wenn Sie bereits Datenbanken und Tabellen in Ihrem MySQL-DBMS haben, erstellen Sie bitte eine Sicherungskopie, bevor Sie fortfahren, da dieser Vorgang aktuelle MySQL-Daten überschreibt.
-
Um eine einzelne Datenbank mit
mysql
wiederherzustellen Befehl, bereiten Sie zunächst die Zieldatenbank vor. Melden Sie sich mit dem MySQL-Client bei Ihrem (neuen) MySQL-Datenbankserver an:mysql -u root -p -h localhost
-
Sie werden nach dem Passwort des Root-MySQL-Benutzers gefragt. Nachdem Sie die richtigen Anmeldeinformationen angegeben haben, müssen Sie die Zieldatenbank erstellen. In diesem Fall der
customer
Datenbank wird wiederhergestellt:1
CREATE DATABASE customer;
-
Lassen Sie wie bei allen MySQL-Anweisungen das abschließende Semikolon nicht weg (z. B.
;
) am Ende jedes Befehls. Abhängig von Ihrer Bereitstellung müssen Sie möglicherweise einen neuen MySQL-Benutzer erstellen oder einen vorherigen Benutzer mit Zugriff auf die neu erstellte Datenbank neu erstellen. Der Befehl zum Erstellen eines neuen MySQL-Benutzers hat folgende Form:1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
Im nächsten Beispiel erstellen wir einen Benutzer namens
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Jetzt geben wir
customeradmin
Privilegien für den Zugriff aufcustomer
Datenbank. Der Befehl zum Gewähren von Berechtigungen für eine Datenbank für einen bestimmten Benutzer hat die folgende Form:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
-
Für die Zwecke des folgenden Beispiels geben wir
customeradmin
an vollen Zugriff auf dencustomer
Datenbank. Setzen Sie den folgenden Befehl im MySQL-Client ab:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Abhängig von den Anforderungen Ihrer Bereitstellung müssen Sie möglicherweise unterschiedliche Zugriffsberechtigungen angeben. Konsultieren Sie die offizielle Dokumentation für die GRANT-Anweisung von MySQL. Nachdem die Zieldatenbank und der MySQL-Benutzer erstellt wurden, können Sie den MySQL-Client mit dem folgenden Befehl schließen:
quit
-
Sie können jetzt
mysql
verwenden Befehl zum Wiederherstellen Ihrer SQL-Datei. Die Form dieses Befehls ähnelt der folgenden:mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
Im folgenden Beispiel stellen wir den customer
wieder her Datenbank aus einer SQL-Sicherungsdatei namens customerBackup.sql
(achten Sie besonders auf den <
Symbol in diesem Befehl):
mysql -u root -p -h localhost customer < customerBackup.sql
Sie werden nach dem Passwort des Root-MySQL-Benutzers gefragt. Sobald die richtigen Anmeldeinformationen eingegeben wurden, beginnt der Wiederherstellungsprozess. Die Dauer dieses Vorgangs hängt von der Auslastung Ihres Systems und der Größe der Datenbank ab, die Sie wiederherstellen. Es kann in wenigen Sekunden abgeschlossen sein oder viele Stunden dauern.
Wiederherstellen einer einzelnen Tabelle aus einer Sicherung
Option 1:Wiederherstellen einer einzelnen Tabelle unter Verwendung von MySQL und von mysqldump erstellten Backups
-
Bevor wir mit dem Wiederherstellungsprozess beginnen, gehen wir davon aus, dass Ihre MySQL-Instanz bereits über eine vorhandene Datenbank verfügt, die die wiederherzustellende Tabelle aufnehmen kann. Wenn Ihre MySQL-Instanz nicht über die erforderliche Datenbank verfügt, müssen wir sie erstellen, bevor wir fortfahren können. Melden Sie sich zunächst mit dem folgenden Befehl bei Ihrer MySQL-Instanz an:
mysql -u root -p -h localhost
-
Sie werden nach dem Passwort des Root-MySQL-Benutzers gefragt. Nachdem Sie die richtigen Anmeldeinformationen angegeben haben, müssen Sie die Zieldatenbank erstellen. Für dieses Beispiel erstellen wir den
customer
Datenbank.1
CREATE DATABASE customer;
Beenden Sie dann
mysql
Eingabeaufforderung:quit
Wenn Sie bereits über die erforderliche Datenbank verfügen, können Sie den obigen Schritt getrost überspringen. Um mit der Tabellenwiederherstellung fortzufahren, geben Sie einen Befehl in der folgenden Form ein:
mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
-
Für das folgende Beispiel stellen wir die
order
wieder her Tabelle in den bestehendencustomer
Datenbank aus einer SQL-Sicherungsdatei namenscustomerOrderBackup.sql
. Seien Sie sehr vorsichtig bei der Verwendung von<
Operator im folgenden Befehl:mysql -u root -p -h localhost customer < customerOrderBackup.sql
Sie werden nach dem Passwort des Root-MySQL-Benutzers gefragt. Sobald die richtigen Anmeldeinformationen eingegeben wurden, beginnt der Wiederherstellungsprozess. Die Dauer dieses Vorgangs hängt von der Auslastung Ihres Systems und der Größe der Tabelle ab, die Sie wiederherstellen. Es kann in wenigen Sekunden abgeschlossen sein oder viele Stunden dauern.
Option 2:Wiederherstellen einer einzelnen Tabelle mit den MySQL-Client und ein INFILE-Statement für mit OUTFILE erstellte Backups
-
Bevor wir mit dem Wiederherstellungsprozess beginnen, gehen wir davon aus, dass Ihre MySQL-Instanz bereits über eine vorhandene Datenbank verfügt, die die wiederherzustellende Tabelle aufnehmen kann. Wenn Ihre MySQL-Instanz nicht über die erforderliche Datenbank verfügt, müssen wir sie erstellen, bevor wir fortfahren können. Melden Sie sich zunächst mit dem folgenden Befehl bei Ihrer MySQL-Instanz an:
mysql -u root -p -h localhost
-
Sie werden nach dem Passwort des Root-MySQL-Benutzers gefragt. Nachdem Sie die richtigen Anmeldeinformationen angegeben haben, müssen Sie die Zieldatenbank erstellen. Für dieses Beispiel erstellen wir den
customer
Datenbank.1
CREATE DATABASE customer;
Beenden Sie dann
mysql
Eingabeaufforderung:quit
-
Die in diesem Fall verwendete Datensicherung wurde mit dem
SELECT * INTO OUTFILE 'backupFile.sql' FROM tableName
erstellt Befehl. Bei dieser Art der Sicherung bleiben nur die Daten selbst erhalten, sodass die Tabellenstruktur neu erstellt werden muss. Um eine einzelne Tabelle aus dem MySQL-Client heraus wiederherzustellen, müssen Sie zuerst die Zieldatenbank und -tabelle vorbereiten. Melden Sie sich mit dem MySQL-Client bei Ihrer (neuen) MySQL-Instanz an:mysql -u root -p -h localhost
-
Sie werden nach dem Passwort des Root-MySQL-Benutzers gefragt. Nachdem die korrekten Anmeldeinformationen bereitgestellt wurden, müssen Sie die Zieldatenbank erstellen. In diesem Fall erstellen wir den
customer
Datenbank. Geben Sie die folgende Anweisung aus:1
CREATE DATABASE customer;
-
Denken Sie daran, dass die Semikolons (z. B.
;
) nach jeder Anweisung sind erforderlich. Jetzt müssen Sie die Zieltabelle mit der richtigen Struktur erstellen. Die Datentypen der Felder der Tabelle müssen denen der Tabelle entsprechen, aus der die Sicherung stammt. In diesem Beispiel stellen wir dieorder
wieder her Tabelle descustomer
Datenbank. Es gibt 2 Felder in derorder
Tabelle,custNum
mit DatentypINT
undorderName
mit DatentypVARCHAR(20)
; Ihre Tabellenstruktur wird anders sein:1 2
USE customer; CREATE TABLE order (custNum INT, orderName VARCHAR(20));
-
Abhängig von Ihrer Bereitstellung müssen Sie möglicherweise einen neuen MySQL-Benutzer erstellen oder einen vorherigen Benutzer mit Zugriff auf die neu erstellte Datenbank neu erstellen. Der Befehl zum Erstellen eines neuen MySQL-Benutzers hat folgende Form:
1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
Im nächsten Beispiel erstellen wir einen Benutzer namens
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Jetzt geben wir
customeradmin
Privilegien für den Zugriff aufcustomer
Datenbank. Der Befehl zum Gewähren von Berechtigungen für eine Datenbank für einen bestimmten Benutzer hat die folgende Form:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
Für die Zwecke des folgenden Beispiels geben wir
customeradmin
an vollen Zugriff auf dencustomer
Datenbank. Setzen Sie den folgenden Befehl im MySQL-Client ab:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Abhängig von den Anforderungen Ihrer Bereitstellung müssen Sie möglicherweise unterschiedliche Zugriffsberechtigungen angeben. Konsultieren Sie die offizielle Dokumentation für die GRANT-Anweisung von MySQL. Nachdem die Tabelle und der Benutzer erstellt wurden, können wir die Sicherungsdaten aus der Sicherungsdatei mit dem
LOAD DATA
importieren Befehl. Die Syntax ähnelt der folgenden:1
LOAD DATA INFILE '[filename]' INTO TABLE [tableName];
Im folgenden Beispiel stellen wir Daten aus einer Tabelle aus einer Datei namens
customerOrderBackup.sql
wieder her . Wenn der MySQL-Client Pfad und Dateiname nachINFILE
erhält , sucht es im MySQL-Datenverzeichnis nach dieser Datei. Wenn der DateinamecustomerOrderBackup.sql
was given, the path would be/var/lib/mysql/customerOrderBackup.sql
. Ensure that the file you are trying to restore from exists, especially if MySQL generatesFile not found
errors. -
To import the data from the
customerOrderBackup.sql
file located in/var/lib/mysql/
, issue the following command:1
LOAD DATA INFILE 'customerOrderBackup.sql' INTO TABLE order;
This process can take anywhere from a few seconds to many hours depending on the size of your table. The duration of this operation depends on your system’s load and the size of the table that you are restoring. It may complete in a few seconds, or it may take many hours. After you have verified that your data was imported successfully, you can log out:
quit
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- The Official MySQL Web Site
- MySQL Database Backup Methods page
- mysqldump Manual Page
- Schedule Tasks With Cron
- MySQL’s Grant Statement, Official Documentation