Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Automatisierte oder regelmäßige Sicherung von MySQL-Daten

CSV und IN OUTFILE AUSWÄHLEN

http://dev.mysql.com/doc/refman /5.7/en/select-into.html

SELECT ... INTO OUTFILE schreibt die ausgewählten Zeilen in eine Datei. Spalten- und Zeilenabschlusszeichen können angegeben werden, um ein bestimmtes Ausgabeformat zu erzeugen.

Hier ist ein vollständiges Beispiel:

SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.csv'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM test_table;

Die Datei wird auf dem Server gespeichert und der gewählte Pfad muss beschreibbar sein. Obwohl diese Abfrage über PHP und eine Webanfrage ausgeführt werden kann, wird sie am besten über die mysql-Konsole ausgeführt.

Die so exportierten Daten können mit DATEN INFILE LADEN

Während diese Methode überlegen ist, eine Ergebnismenge zu durchlaufen und Zeile für Zeile in einer Datei zu speichern, ist sie nicht so gut wie die Verwendung von ....

mysqldump

mysqldump SELECT INTO OUTFILE in vielerlei Hinsicht überlegen ist, ist das Erstellen von CSV nur eines der vielen Dinge, die dieser Befehl tun kann.

Das mysqldump-Client-Dienstprogramm führt logische Sicherungen durch und erzeugt eine Reihe von SQL-Anweisungen, die ausgeführt werden können, um die ursprünglichen Datenbankobjektdefinitionen und Tabellendaten zu reproduzieren. Es sichert eine oder mehrere MySQL-Datenbanken zur Sicherung oder Übertragung auf einen anderen SQL-Server. Der mysqldump-Befehl kann auch eine Ausgabe im CSV-, anderen durch Trennzeichen getrennten Text oder im XML-Format generieren.

Idealerweise sollte mysqldump von Ihrer Shell aus aufgerufen werden. Es ist möglich, exec zu verwenden in php, um es auszuführen, aber da das Erstellen des Dumps je nach Datenmenge sehr lange dauern kann und PHP-Skripte normalerweise nur 30 Sekunden lang ausgeführt werden, müssten Sie es als Hintergrundprozess ausführen.

mysqldump ist nicht ohne Probleme.

Es ist nicht als schnelle oder skalierbare Lösung zum Sichern beträchtlicher Datenmengen gedacht. Bei großen Datenmengen kann das Wiederherstellen der Daten sehr langsam sein, selbst wenn der Sicherungsschritt eine angemessene Zeit in Anspruch nimmt, da das Wiedergeben der SQL-Anweisungen Festplatten-E/A zum Einfügen, Erstellen von Indizes usw. erfordert.

Ein klassisches Beispiel finden Sie in dieser Frage: Serverabsturz beim MySQL-Backup mit Python wo ein mysqldump zu starten scheint, bevor der frühere fertig ist und die Website vollständig nicht mehr reagiert.

Mysql-Replikation

Die Replikation ermöglicht das Kopieren von Daten von einem MySQL-Datenbankserver (dem Master) auf einen oder mehrere MySQL-Datenbankserver (die Slaves). Die Replikation ist standardmäßig asynchron; Slaves müssen nicht dauerhaft verbunden sein, um Updates vom Master zu erhalten. Je nach Konfiguration können Sie alle Datenbanken, ausgewählte Datenbanken oder sogar ausgewählte Tabellen innerhalb einer Datenbank replizieren.

Also Replikation funktioniert anders als SELECT INTO OUTFILE oder msyqldump Es ist ideal, die Daten in der lokalen Kopie fast auf dem neuesten Stand zu halten (hätte gesagt, perfekt synchron, aber es gibt etwas, das als Slave-Verzögerung bezeichnet wird). Wenn Sie andererseits eine geplante Aufgabe verwenden, um mysqldump auszuführen einmal alle 24 Stunden. Stellen Sie sich vor, was passieren kann, wenn der Server nach 23 Stunden abstürzt?

Jedes Mal, wenn Sie mysqldump ausführen, produzieren Sie eine große Datenmenge, tun Sie dies regelmäßig und Sie werden feststellen, dass Ihre Festplatte voll ist oder Ihre Rechnungen für die Dateispeicherung in die Höhe schießen. Bei der Replikation werden nur die Änderungen an den Server weitergegeben (unter Verwendung des sogenannten Binlogs)

XtraBackup

Eine Alternative zur Replikation ist die Verwendung von Percona XtraBackup .

Percona XtraBackup ist ein Open-Source-Hot-Backup-Dienstprogramm für MySQL-basierte Server, das Ihre Datenbank während des Backups nicht sperrt.

Obwohl von Percona, ist es mit Mysql und Mariadb kompatibel. Es hat die Fähigkeit, inkrementelle Backups zu erstellen, was die größte Einschränkung von mysqldump ist.