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

Mycli ist ein unverzichtbares Tool für MySQL-Befehlszeilen-Enthusiasten

mycli MyCLI ist eine Befehlszeilenschnittstelle f...

So löschen Sie verstümmelte oder mit Sonderzeichen versehene Dateien in Linux

Aus Kodierungsgründen werden beim Hochladen oder ...

So verwenden Sie Docker Compose zum Erstellen eines FastDFS-Dateiservers

Im vorherigen Artikel wurde ein ausführliches Bei...

Mit JS ein kleines Flugzeugkriegsspiel implementieren

In diesem Artikelbeispiel wird der spezifische JS...

Lösung für das Timeout-Problem bei der Installation von Docker-Compose mit PIP

1: Installationsbefehl pip install docker-compose...

Auszeichnungssprachen – Nochmal auflisten

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Vue simuliert die Warenkorb-Abrechnungsfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung des this-Zeigeproblems in JavaScript

Zusammenfassen Globale Umgebung ➡️ Fenster Normal...

Der Unterschied zwischen div und span in HTML (Gemeinsamkeiten und Unterschiede)

Gemeinsamkeiten: Das DIV-Tag und das SPAN-Tag beh...