Zwei Methoden zum Wiederherstellen von MySQL-Daten

Zwei Methoden zum Wiederherstellen von MySQL-Daten

1. Einleitung

Vor einiger Zeit gab es eine Reihe von Fällen, in denen Entwickler aufgrund fehlerhafter Vorgänge in der Testumgebung und in der Produktion versehentlich die Datenbank gelöscht/aktualisiert haben. Für DBAs ist das Zurücksetzen von Daten wirklich ein Problem. Wann immer es darum geht, Online-Daten wiederherzustellen, hat dies zwangsläufig gewisse Auswirkungen auf die Anwendung. In den meisten Fällen löschen Entwickler Daten und aktualisieren die meisten Zeilen aufgrund fehlerhafter Vorgänge. Basierend auf früheren Betriebserfahrungen stellt dieser Artikel gängige Wiederherstellungsmethoden vor.

2. Gängige Wiederherstellungsmethoden

2.1 Wiederherstellen aus einem Backup

Voraussetzung für die Verwendung dieser Methode ist, dass Sie über den aktuellsten Sicherungssatz verfügen oder die Binärprotokollposition oder GTID kennen, an der der Fehlervorgang gestartet wurde. Verwenden Sie den Sicherungssatz zum Wiederherstellen auf dem Zwischencomputer und verwenden Sie dann die Slave-Funktion von MySQL.

START SLAVE [SQL_THREAD] BIS MASTER_LOG_FILE = "log_name", MASTER_LOG_POS = log_pos;

bis_Option:

BIS { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set | MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos | RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos | SQL_AFTER_MTS_GAPS }

Stellen Sie die Daten auf einer temporären Instanz wieder her, sichern Sie sie vor dem versehentlichen Löschen und Aktualisieren und stellen Sie sie auf der alten Instanz wieder her. Am besten ist es, die betroffenen Tabellen bei der Datenwiederherstellung nicht beschreibbar zu machen, da es sonst schwierig wird, die gewünschten Ergebnisse zu erzielen. Beispielsweise wird a=2 fälschlicherweise auf a=4 aktualisiert und während der Wiederherstellungsphase auf a=7 aktualisiert und nach der Wiederherstellung wieder auf a=2 zurückgesetzt. Diese Wiederherstellungsmethode ist nicht für die Wiederherstellung einer großen Anzahl von Datenbanken geeignet und erfordert eine temporäre Instanz.

2.2 Wiederherstellen mit dem Open Source-Tool binlog2sql

binlog2sql ist ein von Dianpings DBA entwickeltes Tool. Es basiert auf der Analyse von Binlog, um das Löschen wiederherzustellen und einzufügen. Außerdem werden das Feld „Aktualisierungswert festlegen“ und die Where-Bedingung ausgetauscht, um die Daten wiederherzustellen. Nutzungsbeschränkungen: Das MySQL-Binlog-Format muss eine Zeileninstallation sein

git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r Anforderungen.txt

Verwendung

Verwendung: binlog2sql.py [-h HOST] [-u BENUTZER] 
           [-p PASSWORT] [-P PORT]
           [--start-file STARTDATEI] 
           [--start-position STARTPOS]
           [--stop-file ENDFILE] 
           [--stop-position ENDPOS]
           [--start-datetime STARTZEIT] 
           [--stop-datetime STOPPZEIT]
           [--stopp-niemals] 
           [-d [DATENBANKEN [DATENBANKEN ...]]]
           [-t [TABELLEN [TABELLEN ...]]] 
           [-K] [-B]
           [--helfen]

Beispiel

Tabelle Flashback erstellen(
id int(11) ungleich null auto_increment Primärschlüssel ,
stat int(11) nicht null Standard 1 
) Engine=InnoDB Standardzeichensatz=UTF8;

in Flashback einfügen (stat) 
Werte (2),(3),(4),(7),(9),(22),(42),(33),(66),(88)

Fehlbedienung

Update-Flashback-Set Stat=15

Schritte zur Datenwiederherstellung

1. Holen Sie sich das Binlog, in dem sich das fehlerhafte DML befindet. Entwickler kennen das spezifische Binlog jedoch im Allgemeinen nicht. Sie wissen nur, wann der fehlerhafte Vorgang aufgetreten ist. Binlog2sql unterstützt die Wiederherstellung nach Zeitbereich.

mysql> Master-Protokolle anzeigen;
+------------------+------------+
| Protokollname | Dateigröße |
+------------------+------------+
|mysql-bin.000009 | 177 |
|mysql-bin.000010 | 464 |
|mysql-bin.000011 | 8209 |
+------------------+------------+
3 Zeilen im Satz (0,00 Sek.)

In diesem Beispiel ist binlog mysql-bin.000011

2. Verwenden Sie binlog2sql, um Daten wiederherzustellen. Analysieren Sie zunächst das Binlog, um die Startposition der Update-Anweisung zu ermitteln. In diesem Beispiel starten Sie bei 5087 und enden bei 5428. Führen Sie den Befehl aus

python binlog2sql.py -h127.0.0.1 -P3307 -udba -p'dbadmin' -dyang -tflashback --start-file='mysql-bin.000011'

Verwenden Sie den Parameter binlog2sql -B, um das wiederhergestellte SQL abzurufen

Führen Sie das erhaltene SQL für die Datenbank aus. Wenn in der Produktionsumgebung tatsächlich ein Problem auftritt, kommunizieren Sie unbedingt mit dem Entwickler und bestätigen Sie die genauen Datensätze, die wiederhergestellt werden müssen.

mysql> wähle * aus Flashback;
+----+------+
| Ich würde | Statistik |
+----+------+
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 7 |
| 5 | 9 |
| 6 | 22 |
| 7 | 42 |
| 8 | 33 |
| 9 | 66 |
| 10 | 88 |
+----+------+
10 Zeilen im Satz (0,00 Sek.)

Funktionen von binlog2sql:

Der MySQL-Server muss gestartet werden und die Vorteile können im Offlinemodus nicht analysiert werden (im Vergleich zu mysqlbinlog).

Reine Python-Entwicklung, einfach zu installieren und zu verwenden.

Es verfügt über Flashback- und No-Primary-Key-Parsing-Modi, sodass keine Patches erforderlich sind.

Der Flashback-Modus ist besser für Flashback-Kämpfe geeignet.

Um das Verständnis und Debuggen zu erleichtern, führen Sie eine Analyse in Standard-SQL durch.

Der Code lässt sich leicht ändern und kann eine individuellere Analyse unterstützen.

Tatsächlich bietet MySQL auch einen Parameter sql_safe_updates, der Lösch- und Aktualisierungsanweisungen ohne Where-Bedingungen verhindert. Informationen zur spezifischen Verwendung und Einführung finden Sie in der offiziellen Einführung zu MySQL.

Abschluss

In diesem Artikel werden kurz zwei Methoden zur Wiederherstellung von Daten nach fehlerhaften Vorgängen vorgestellt. Tatsächlich gibt es noch andere Möglichkeiten, z. B. die Verwendung von mysqlbinlog zum Schreiben von Skripten zur Datenwiederherstellung, die Verwendung von Flashback-Patches oder Qunars Inception usw. Sie können sie weiter studieren. Der Schutz der Datensicherheit ist die grundlegende Verantwortung eines DBA. Jedes Jahr kommt es zu zahlreichen Tragödien durch versehentliches Löschen von Daten. Ich hoffe, dass jeder DBA seine Lebensader schützen kann.

Oben sind die Details zu zwei Methoden zur Wiederherstellung von MySQL-Daten aufgeführt. Weitere Informationen zur Wiederherstellung von MySQL-Daten finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So stellen Sie Daten mit Binlog in MySQL 5.7 wieder her
  • MySQL stellt Daten über Binlog wieder her
  • MySQL verwendet frm-Dateien und ibd-Dateien, um Tabellendaten wiederherzustellen
  • MySQL verwendet Binlog-Protokolle zur Implementierung der Datenwiederherstellung
  • Implementierung von MySQL mit dem Befehl mysqlbinlog zum Wiederherstellen versehentlich gelöschter Daten
  • Implementierungscode für die Sicherung und Wiederherstellung von MySQL-Datenbanken
  • MySQL verwendet mysqldump + binlog, um die Prinzipanalyse der gelöschten Datenbank vollständig wiederherzustellen
  • Analyse der Implementierungsmethoden für MySQL-Datensicherung und -Wiederherstellung
  • MySQL Binlog-Datenwiederherstellung: Detaillierte Erklärung zum versehentlichen Löschen einer Datenbank
  • Zusammenfassung verschiedener Methoden zur MySQL-Datenwiederherstellung

<<:  So installieren Sie Docker mithilfe von Skripten unter Linux Centos

>>:  Vue verwendet ECharts zur Implementierung von Liniendiagrammen und Kreisdiagrammen

Artikel empfehlen

Skin-Change-Lösung basierend auf Vue kombiniert mit ElementUI

Inhaltsverzeichnis Vorne geschrieben Lösung 1: Gl...

Beispielcode zur Verwendung der Elementkalenderkomponente in Vue

Schauen Sie sich zunächst das Wirkungsdiagramm an...

Nginx implementiert ein Codebeispiel für die https-Websitekonfiguration

https-Basisport 443. Er wird für etwas verwendet,...

So ändern Sie den Punkt im WeChat-Applet Swiper-Dot in einen Slider

Inhaltsverzeichnis Hintergrund Zieleffekt Ideen e...

Beispiel einer JSON-Ausgabe im HTML-Format (Testschnittstelle)

Um die JSON-Daten in einem schönen eingerückten F...

Implementierungscode zur Verwendung der MongoDB-Datenbank in Docker

Holen Sie sich das Mongo-Image sudo docker pull m...