Schritte zum Wiederherstellen einer einzelnen MySQL-Tabelle

Schritte zum Wiederherstellen einer einzelnen MySQL-Tabelle

Während ich eine Pause machte, wurde ich durch einen Anruf aus meiner Schläfrigkeit gerissen. „Der Entwickler hat vergessen, beim Schreiben des Update-SQL die Where-Bedingung hinzuzufügen.“ Ich glaube, jeder DBA-Kommilitone würde bei dieser Neuigkeit fluchen wollen. Glücklicherweise war nur eine einzige Tabelle durcheinander geraten und kein Experte hatte damit herumgespielt, Tabellen aus der Datenbank zu löschen. Obwohl ich schon lange keine Einzeltabellenwiederherstellung mehr durchgeführt habe, sind die Schritte glücklicherweise alle in meinem Gedächtnis eingeprägt und ich habe die Wiederherstellung ohne Probleme abgeschlossen.

Lassen Sie mich nun die Schritte und wichtigsten Punkte zur Wiederherstellung einer einzelnen Tabelle aufzeichnen, um mich selbst und alle anderen daran zu erinnern.

Erster Schritt:

Suchen Sie als Wiederherstellungsmaschine einen Server mit relativ hoher Leistung und stellen Sie das aktuellste Backup aus dem Backup-Pool auf dieser Wiederherstellungsmaschine wieder her. Dies setzt natürlich voraus, dass Sie über ein Backup verfügen und dass das Backup verfügbar ist. (Was? Du hast mir gesagt, dass du kein Backup gemacht hast. Dann kannst du ins Bett gehen und die freie Luft genießen.)

Hinweis: Starten Sie die Synchronisierung jetzt nicht, sondern achten Sie darauf, dass sie sich im asynchronen Zustand befindet.

p.s.: Eines möchte ich noch sagen. Für DBAs ist das Backup das wichtigste Bindeglied. Man muss es nicht nur haben, sondern auch regelmäßig prüfen, ob das Backup verfügbar ist. Dies ist eine der notwendigen Eigenschaften eines DBAs.

Schritt 2:

Wenden Sie sich an den Entwickler, der den Fehler gemacht hat, die falsche SQL-Anweisung und den falschen Zeitpunkt zu erhalten, und suchen Sie dann den Ausführungspunkt dieser SQL-Anweisung im Binärprotokoll der Hauptdatenbank. Die spezifischen Betriebsbeispiele sind wie folgt

### Verwenden Sie mysqlbinlog, um Binärprotokolle in SQL-Protokolle im Klartext zu konvertieren: mysqlbinlog mysql-bin.000123 > /data1/000123.sql

### Verwenden Sie den Linux-Befehl grep, um den Speicherort des SQL zu finden, das basierend auf dem „Schlüsselwort“ Datenbeschädigungen verursacht cat 000123.sql |grep -C 10 'Schlüsselwort' --color

### Die roten sind das problematische SQL, die Startzeit dieses SQL und die Startzeit des nächsten SQL. Diese beiden POS-Positionen sind sehr wichtig# bei 20393709
#131205 20:55:08 Server-ID 18984603 End-Log-Pos 20393779 Abfrage Thread-ID = 16296016 Exec-Zeit = 0 Fehlercode = 0
ZEITSTEMPEL EINSTELLEN=1386248108/*!*/;
BEGINNEN
/*!*/;
# bei 20393779
#131205 20:55:08 Server-ID 18984603 End-Log-Pos 20394211 Abfrage Thread-ID = 16296016 Exec-Zeit = 0 Fehlercode = 0
ZEITSTEMPEL EINSTELLEN=1386248108/*!*/;
Tabelle aktualisieren Tabellenname Namen festlegen='xxxx';
# bei 20394211
#131205 20:55:08 Server-ID 18984603 end_log_pos 20394238 Xid = 92465981
BEGEHEN /*!*/;
# bei 20394238
#131205 20:55:10 Server-ID 18984603 End-Log-Pos 20394308 Abfrage Thread-ID = 16296017 Exec-Zeit = 0 Fehlercode = 0
ZEITSTEMPEL EINSTELLEN=1386248110/*!*/;
BEGINNEN

Schritt 3:

Starten Sie die Synchronisierungsbeziehung basierend auf der im zweiten Schritt erhaltenen POS-Position. Sie müssen jedoch an der POS-Position vor dem problematischen SQL anhalten. Verwenden Sie dazu den folgenden Befehl

### Die POS-Position ist gleich der POS-Position des Problems SQL beginnt mit dem Start des Slaves, bis master_log_file='mysql-bin.000123',master_log_pos=20393709;

Überspringen Sie dann dieses SQL und synchronisieren Sie die Änderung mit der nächsten POS-Position. Verwenden Sie den folgenden Befehl

### Die POS-Position ist gleich der POS-Position nach dem problematischen SQL-Commit. Ändern Sie Master in master_log_file='mysql-bin.000123',master_log_pos=20394238;

Aus den beiden obigen Befehlen können wir erkennen, dass die beiden im zweiten Schritt erhaltenen POS-Positionen kritisch sind.

Schritt 4:

Das Umbenennen der Tabelle mit den Abfalldaten in der Hauptdatenbank hat zwei Gründe. Erstens, um das Schreiben in diese Tabelle zu stoppen (natürlich hat dies gewisse Auswirkungen auf das Geschäft, und es wird für einen bestimmten Zeitraum Alarme bei Schreibfehlern geben, daher müssen Sie sich im Voraus an die Geschäftsabteilung wenden). Zweitens, wenn die Wiederherstellung fehlschlägt, gibt es zumindest noch eine Tabelle mit den Abfalldaten, die schnell in den Zustand vor unserem Wiederherstellungsvorgang zurückversetzt werden kann.

### Führen Sie in der Hauptdatenbank die Umbenennung der Tabelle tablename in tablename_bak aus.

Führen Sie dann den Dump-Vorgang auf der Wiederherstellungsmaschine aus. Gehen Sie bei diesem Vorgang vorsichtig vor. Wenn die Tabelle chinesische Zeichen enthält, denken Sie daran, den Parameter --default-chararter-set hinzuzufügen.

mysqldump -uusername -ppassword -S/tmp/mysql.sock dbname Tabellenname --opt> Tabellenname.sql

Übertragen Sie diese Datei abschließend auf den Hauptbibliotheksserver, um den endgültigen Wiederherstellungsvorgang abzuschließen.

### Sie können die Quelle tablename.sql auswählen, nachdem Sie sich bei MySQL angemeldet haben.

### Sie können auch die cmd-Schnittstelle mysql -uusername -ppassword -S/tmp/mysql.sock < tablename.sql verwenden

Natürlich können Sie dieses Problem auch vermeiden und den folgenden Befehl direkt ausführen. Ich persönlich speichere jedoch normalerweise historische Betriebsaufzeichnungen und Zwischenergebnisse, sodass ich die obigen Schritte befolge, um dies abzuschließen. Auf diese Weise kann ich eine Textdatei speichern, die jederzeit wiederhergestellt werden kann, was mir ein besseres Gefühl gibt.

### Eine schnelle Methode besteht darin, die folgenden Schritte auszuführen. Führen Sie auf der Wiederherstellungsmaschine den Befehl mysql -uusername -ppassword -S /tmp/mysql.sock dbname tablename | mysql -uusername -ppassowrd -hhost -Pport aus.

Mit den obigen Befehlen können die Dump- und Importvorgänge direkt abgeschlossen werden. Der Nachteil besteht darin, dass keine Sicherungsdatei erstellt wird.

Schritt 5:

Die grundlegende Arbeit des DBA ist beendet. Zu diesem Zeitpunkt ist es notwendig, das Entwicklungspersonal darüber zu informieren, dass die Wiederherstellung abgeschlossen ist, und Anwendungstests und eine Überprüfung der Datenkorrektheit durchzuführen. Wenn alles in Ordnung ist, müssen wir die gerade umbenannte Tabelle löschen und der Wiederherstellungsvorgang ist abgeschlossen.

Tabelle löschen, falls vorhanden, tablename_bak;

Die Wiederherstellung von Datenbanken ist eine grundlegende Fähigkeit für jeden DBA und muss beherrscht werden. Ich hoffe, dass Studenten, die diesen Artikel gelesen haben, Wiederherstellungsvorgänge problemlos durchführen können.

PS: Am besten wäre es, wenn Sie diese Operation nicht alle zehntausend Jahre anwenden würden.

Oben finden Sie die detaillierten Schritte zur Wiederherstellung einer MySQL-Einzeltabelle. Weitere Informationen zur Wiederherstellung einer MySQL-Einzeltabelle finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So stellen Sie einzelne Tabellendaten mithilfe der vollständigen MySQL-Datenbanksicherungsdaten wieder her
  • So stellen Sie eine einzelne Datenbank oder Tabelle in MySQL wieder her und mögliche Fallstricke
  • So stellen Sie eine Datenbank und eine Tabelle aus einer vollständigen MySQL-Datenbanksicherung wieder her
  • 3 Methoden zum Wiederherstellen der Tabellenstruktur aus einer FRM-Datei in MySQL [empfohlen]
  • InnoDB-Typ MySql stellt Tabellenstruktur und Daten wieder her
  • MySQL-Wiederherstellung angegebener Tabellen und Bibliotheken aus einer vollständigen Datenbanksicherung – Beispiel
  • Detaillierte Erläuterung der Methode zur Wiederherstellung von MySQL-Einzeltabellen-IBD-Dateien
  • MySQL verwendet .frm, um die Datentabellenstruktur wiederherzustellen
  • So verwenden Sie mysqldump zum Sichern und Wiederherstellen bestimmter Tabellen
  • MySQL verwendet frm-Dateien und ibd-Dateien, um Tabellendaten wiederherzustellen

<<:  Vant Uploader implementiert die Komponente zum Hochladen eines oder mehrerer Bilder

>>:  Tomcats Methode zum Festlegen von Ports über Platzhalter (d. h. Methode zur Parameterspezifikation)

Artikel empfehlen

Was sind HTML-Inline-Elemente und Block-Level-Elemente und ihre Unterschiede

Ich erinnere mich an eine Frage, die der Intervie...

Installieren des Win10-Systems auf VMware Workstation 14 Pro

Dieser Artikel beschreibt zu Ihrer Information, w...

Installations-Tutorial zur neuesten MySQL-Version 8.0.17 mit Dekomprimierung

Ich persönlich denke, dass die dekomprimierte Ver...

Detailliertes Tutorial zum Erstellen eines privaten Git-Servers unter Linux

1. Server-Setup Das Remote-Repository unterscheid...

Docker verwendet das Tool nsenter, um in den Container zu gelangen

Bei der Verwendung von Docker-Containern ist es b...

Details zur MySQL-Sortierfunktion

Inhaltsverzeichnis 1. Problemszenario 2. Ursachen...

Lernprogramm für HTML-Webseitenlisten-Tags

Lernprogramm zum Erlernen von Listen-Tags für HTML...

JavaScript zum Erreichen einer festen Seitenleiste

Verwenden Sie Javascript, um eine feste Seitenlei...

Vue+echarts realisiert Fortschrittsbalken-Histogramm

In diesem Artikel wird der spezifische Code von v...