Beim Sichern von MySQL-Datenbanken wird häufig der Befehl mysqldump ohne Optionen verwendet. Dieser Befehl verfügt jedoch über viele interessante Optionen, die erweiterte Sicherungen ermöglichen.
comando mysqldump genera una copia de la estructura sql todas las tablas de la base de datos indicada, en un archivo de texto sql. Standardmäßig generiert der Befehl mysqldump eine Kopie der SQL-Struktur aller Tabellen in der angegebenen Datenbank in einer SQL-Textdatei. Um nur eine oder mehrere Tabellen einzuschließen, geben Sie deren Namen nach dem Namen der Datenbank an.
Im Terminalfenster im mysql-Verzeichnis:
# Sicherungskopie einer einzelnen Tabelle $ mysqldump -user = user --password = Datenbankschlüsseltabelle> backup_copy.sql
# Sicherungskopie von drei Tabellen $ mysqldump -user = user --password = Schlüsseldatenbank der Tabellen table1 table2 table3> copied_security.sql
Beispiele für 1 oder 3 Tabellen.
1. Einige Tabellen von der Sicherung ausschließen
Um zu vermeiden, dass eine bestimmte Tabelle in das Backup aufgenommen wird, müssen wir sie mit der Option –ignore-table angeben, deren Wert angegeben werden soll
Wenn Sie beispielsweise eine Sicherungskopie einer Datenbank mit dem Namen Commerce erstellen, aber keine Tabelle mit dem Namen sales enthalten möchten, führen Sie den folgenden Befehl aus:
$ mysqldump --user = Benutzername - Passwort = Passwort --ignore-table = commerce.sales trade> copia_seguridad.sql
Mit anderen Worten, kopieren Sie die gesamte Datenbank abzüglich der Verkaufstabelle. Wenn wir mehrere Tabellen ausschließen möchten, müssen wir den folgenden Befehl verwenden:
$ mysqldump --user = user --password = password --ignore-table = commerce.sales --ignore-table = commerce.products --ignore-table = commerce.prices commerce> copia_seguridad.sql
(Um mehrere Tabellen auszuschließen, geben Sie deren Namen mit möglichst vielen Optionen an –ignore-table)
2. Begrenzen der Anzahl der Datensätze in jeder Tabelle
mysqldump copiara todos los registros de todas las tablas. Standardmäßig kopiert der Befehl mysqldump alle Datensätze aller Tabellen. –where , que permite indicar la condición de tipo WHERE que se añade a las consultas SELECT que se realizan para extraer todos los registros: Wenn Sie die Datensätze vorfiltern möchten, fügen Sie die Option –where hinzu , mit der Sie die WHERE- Bedingung angeben können , die zu den SELECT- Abfragen hinzugefügt wird, mit denen alle Datensätze extrahiert werden:
$ mysqldump --user = user --password = password --where = "Alter> 18 UND Alter <65" Datenbank> copia_seguridad.sql
Wenn wir nur einige Datensätze aus der Datenbank extrahieren möchten, zum Beispiel die ersten 500
$ mysqldump --user = user -password = password --where = "1 Grenze 500" Datenbank> copia_seguridad.sql
Sie würden mit einem Limit von 500 extrahiert.
3. Kopieren Sie nur die Struktur der Tabellen, aber nicht deren Daten
mysqldump vuelca tanto la estructura de las tablas como toda su información. Standardmäßig gibt der Befehl mysqldump sowohl die Struktur der Tabellen als auch alle ihre Informationen aus. –no-data . Wenn Sie nur die Struktur von Tabellen und Spalten sichern möchten, verwenden Sie die Option –no-data . So können Sie eine andere Datenbank erstellen, die genau gleich, aber leer ist:
$ mysqldump --user = user --password = password --no-data database> copia_seguridad.sql
Normalerweise werden die Einfügungen beim Generieren in einer einzigen Anweisung gruppiert, um Codezeilen wie folgt zu speichern:
INSERT INTO table VALUES (1, 'name1'), (2, 'name2'), (3, 'name3');
Dies ist das Verhalten, das bei alten Systemen zu Fehlern führen kann, die Längengrade nicht verarbeiten können. Möglicherweise haben Sie auch Probleme mit Ihrem Texteditor, wenn Sie versuchen, eine Sicherungsdatei zu öffnen, die diese langen Zeilen enthält.
Wenn wir mit diesem Fall konfrontiert sind, können wir die Option –extended-insert = false hinzufügen, damit jedes INSERT mit einer eigenen Anweisung ausgeführt wird:
$ mysqldump --user = user -password = password --extended-insert = false database> backup_copy.sql
Das Ergebnis wird folgendes sein:
INSERT INTO table VALUES (1, 'name1'); INSERT INTO table VALUES (2, 'name2'); INSERT INTO table VALUES (3, 'name3');