Einführung in FRM-Dateien und IBD-DateienWenn wir in MySQL die Standard-Speicher-Engine innodb zum Erstellen einer Tabelle verwenden, erscheinen im Ordner zwei Dateien, Tabellenname.frm und Tabellenname.ibd. Wenn wir die Myisam-Speicher-Engine verwenden, erscheinen drei Dateien. Hier ein Beispiel: [root@ /data/yeyz]#ll insgesamt 580 -rw-rw---- 1 mysql mysql 8586 3. April 17:44 Uhr a.frm -rw-rw---- 1 mysql mysql 0 3. April 17:44 Uhr -rw-rw---- 1 mysql mysql 1024 3. April 17:44 Uhr -rw-rw---- 1 mysql mysql 8586 3. April 17:44 b.frm -rw-rw---- 1 mysql mysql 98304 3. April 17:45 Uhr vormittags -rw-rw---- 1 mysql mysql 61 23. November 09:54 db.opt -rw-rw---- 1 mysql mysql 8556 29. April 21:37 tbl_test_2.frm -rw-rw---- 1 mysql mysql 98304 29. April 21:37 tbl_test_2.ibd -rw-rw---- 1 mysql mysql 8556 29. April 21:33 tbl_test.frm -rw-rw---- 1 mysql mysql 98304 29. April 21:33 tbl_test.ibd -rw-rw---- 1 mysql mysql 8614 29. April 21:40 test.frm -rw-rw---- 1 mysql mysql 98304 29. April 21:43 test.ibd -rw-rw---- 1 mysql mysql 8666 2. April 15:13 unstandard_ins.frm -rw-rw---- 1 mysql mysql 98304 3. April 11:46 unstandard_ins.ibd -rw-rw---- 1 mysql mysql 8586 3. April 17:44 yeyz.frm -rw-rw---- 1 mysql mysql 28. April 3 17:44 yeyz.MYD -rw-rw---- 1 mysql mysql 2048 3. April 17:44 yeyz.MYI Unter ihnen ist die ibd-Datei die InnoDB-Tabellendatendatei und die frm-Datei die InnoDB-Tabellenstrukturdatei. In der Tabelle der Mysiam-Speicher-Engine ist frm die Tabellenstruktur, die MYI-Datei ist die Indexdatei und die MYD-Datei ist die Datendatei. Hier ist auch zu sehen, dass der Index und die Daten der InnoDB-Speicher-Engine zusammen sind, während der Index und die Daten der Myisam-Speicher-Engine getrennt sind. Zu beachten ist, dass sich weder die frm-Datei noch die ibd-Datei direkt öffnen lassen. Stellen Sie sich eine Anforderung vor, bei der die Daten in einer Tabelle schnell wiederhergestellt werden müssen. Die Datenbank, in der sich die Tabelle befindet, enthält jedoch eine große Datenmenge und die Wiederherstellung kann lange dauern. Daher ist eine vollständige Datenbankwiederherstellung definitiv nicht die beste Option. Was also sollten wir in dieser Situation tun? Wir können FRM-Dateien und IBD-Dateien verwenden, um Daten wiederherzustellen. Lassen Sie uns diesen Prozess unten analysieren. Tabellenstruktur zur Wiederherstellung von FRM-DateienNatürlich muss die Tabellenstruktur mithilfe der frm-Datei wiederhergestellt werden. Unsere erste Reaktion ist, dass wir diese beiden Dateien direkt in eine neue Datenbankinstanz kopieren und dann die Instanz direkt starten können. Ist das möglich? Natürlich nicht. Wenn mein Neffe das schafft, werden vermutlich alle DBAs entlassen. Haha, schauen wir uns ohne weitere Umschweife den Operationsvorgang an. Zunächst erstellen wir eine neue Instanz speziell für die Wiederherstellung von Daten. Wenn Sie zur Wiederherstellung eine Online-Maschine verwenden, müssen Sie das Risiko eines Datenbankneustarts und einer DML-Blockierung tragen. Daher ist es am besten, eine dedizierte Instanz für die Wiederherstellung zu verwenden. Wie erhalten wir also die gewünschte Tabellenstruktur aus der FRM-Datei? Lassen Sie mich als Beispiel eine Online-Slow-Log-Tabelle nehmen. Der Einfachheit halber habe ich den Tabellennamen als „aaa“ geschrieben. Die Struktur dieser Tabelle ist wie folgt: mysql--root@localhost:test_recover 12:08:43>>zeige Tabelle erstellen aaa\G *************************** 1. Reihe *************************** Tabelle: aaa Tabelle erstellen: CREATE TABLE `aaa` ( `maintain_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Spalte automatisch inkrementieren', `slowquery_filename` varchar(50) DEFAULT NULL COMMENT 'Name der langsamen Protokolldatei', `slowquery_path` varchar(150) DEFAULT NULL COMMENT 'Vollständiger Pfad des langsamen Protokolls', `slowquery_process` tinyint(20) unsigned NOT NULL DEFAULT '0' COMMENT 'Ob das langsame Protokoll analysiert wird', `slowquery_uploadtime` Datum/Uhrzeit STANDARD CURRENT_TIMESTAMP, `slowquery_analyzetime` date DEFAULT NULL COMMENT 'Langsame Protokollanalysezeit', `slowquery_starttime` Datum DEFAULT NULL, `slowquery_endtime` Datum DEFAULT NULL, `instance_ip` varchar(15) DEFAULT NULL COMMENT 'Langsame Protokoll-IP-Adresse', `instance_port` int(11) DEFAULT NULL COMMENT 'Langsame Protokollportnummeradresse', PRIMÄRSCHLÜSSEL (`maintain_id`) ) ENGINE=InnoDB STANDARD-CHARSET=utf8 1 Zeile im Satz, 1 Warnung (0,01 Sek.) Um eine solche Tabelle aus der FRM-Datei zu erhalten, müssen wir die folgenden Schritte ausführen: 1. Erstellen Sie eine Tabelle mit dem gleichen Namen wie aaa auf der Instanz. Da wir die Struktur dieser Tabelle nicht kennen, können wir sie so einrichten, dass sie nur eine Feld-ID hat, d. h. Tabelle aaa erstellen (ID int); Wir wissen, dass zu diesem Zeitpunkt neue aaa.frm- und aaa.ibd-Dateien im entsprechenden Datenverzeichnis generiert werden. Anschließend verwenden wir die gesicherte aaa.frm, um die vorherige aaa.frm zu ersetzen und die Datenbank neu zu starten. Ja, Sie haben richtig gelesen. Wir verwenden die Sicherungsdatei der Tabellenstruktur, um die generierte Tabellenstrukturdatei zu ersetzen. 2. Sehen Sie sich die Fehlerprotokollausgabe nach dem Neustart wie folgt an: 2019-03-22T03:17:28.652390Z 16 [Warnung] InnoDB: Tabelle test_recover/store_goods_price enthält 1 Benutzer definierte Spalten in InnoDB, aber 12 Spalten in MySQL. Bitte überprüfen Sie INFORMATION_SCHEMA.INNODB_SYS_COLUMNS und http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html, um zu erfahren, wie Sie das Problem beheben können. 2019-04-02T07:56:31.558461Z 41 [Warnung] InnoDB: Tabelle test_recover/dv_control enthält 1 benutzerdefinierten Spalten in InnoDB, aber 14 Spalten in MySQL. Bitte überprüfen Sie INFORMATION_SCHEMA.INNODB_SYS_COLUMNS und http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html, um zu erfahren, wie Sie das Problem beheben können. 2019-05-23T03:14:10.161122Z 92 [Warnung] InnoDB: Tabelle test_recover/aaa enthält 1 benutzerdefinierte Spalten in InnoDB, aber 10 Spalten in MySQL. Bitte überprüfen Sie INFORMATION_SCHEMA.INNODB_SYS_COLUMNS und http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html, um zu erfahren, wie Sie das Problem beheben können. Wie Sie sehen, teilt uns das Fehlerprotokoll in den Zeilen 10-12 mit, dass die Tabelle aaa nur ein Feld enthält, frm jedoch 10 Felder enthält und die Anzahl der Felder nicht übereinstimmt. Dies entspricht unserem erwarteten Ergebnis, da wir der Tabelle aaa beim Erstellen nur eine Feld-ID zugewiesen haben und die aaa-Tabelle, die wir wiederherstellen möchten, 10 Felder aufweist, die nicht aus frm gelesen werden können. An diesem Punkt können Sie sich leicht vorstellen, was das Endergebnis sein wird, wenn wir die Felder dieser AAA-Tabelle auf 10 anpassen. 3. Aktualisieren Sie die Anzahl der Felder in der AAA-Tabelle auf 10, kopieren Sie dann die FRM-Datei erneut und ändern Sie den Parameter innodb_force_recovery=6 in der Konfigurationsdatei. Sehen wir uns das Endergebnis an: mysql--root:(keine) 12:04:20>>test_recover verwenden; Datenbank geändert mysql - root: test_recover 12:04:25>>Tabelle aaa erstellen (id1 int, id2 int, id3 int, id4 int, id5 int, id6 int, id7 int, id8 int, id9 int, id10 int); Abfrage OK, 0 Zeilen betroffen (0,03 Sek.) mysql--root@localhost:test_recover 12:05:08>>zeige Tabelle erstellen aaa\G *************************** 1. Reihe *************************** Tabelle: aaa Tabelle erstellen: CREATE TABLE `aaa` ( `id1` int(11) DEFAULT NULL, `id2` int(11) DEFAULT NULL, `id3` int(11) DEFAULT NULL, `id4` int(11) DEFAULT NULL, `id5` int(11) DEFAULT NULL, `id6` int(11) DEFAULT NULL, `id7` int(11) DEFAULT NULL, `id8` int(11) DEFAULT NULL, `id9` int(11) DEFAULT NULL, `id10` int(11) STANDARD NULL ) ENGINE=InnoDB STANDARD-CHARSET=utf8 1 Zeile im Satz (0,00 Sek.) Dann starten wir die Instanz neu und überprüfen die Tabelle aaa erneut. Wir können die folgenden Ergebnisse sehen: mysql--root:test_recover 12:08:43>>zeige Tabelle erstellen aaa\G *************************** 1. Reihe *************************** Tabelle: aaa Tabelle erstellen: CREATE TABLE `aaa` ( `maintain_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Spalte automatisch inkrementieren', `slowquery_filename` varchar(50) DEFAULT NULL COMMENT 'Name der langsamen Protokolldatei', `slowquery_path` varchar(150) DEFAULT NULL COMMENT 'Vollständiger Pfad des langsamen Protokolls', `slowquery_process` tinyint(20) unsigned NOT NULL DEFAULT '0' COMMENT 'Ob das langsame Protokoll analysiert wird', `slowquery_uploadtime` Datum/Uhrzeit STANDARD CURRENT_TIMESTAMP, `slowquery_analyzetime` date DEFAULT NULL COMMENT 'Langsame Protokollanalysezeit', `slowquery_starttime` Datum DEFAULT NULL, `slowquery_endtime` Datum DEFAULT NULL, `instance_ip` varchar(15) DEFAULT NULL COMMENT 'Langsame Protokoll-IP-Adresse', `instance_port` int(11) DEFAULT NULL COMMENT 'Langsame Protokollportnummeradresse', PRIMÄRSCHLÜSSEL (`maintain_id`) ) ENGINE=InnoDB STANDARD-CHARSET=utf8 1 Zeile im Satz, 1 Warnung (0,01 Sek.) Es ist ersichtlich, dass die gewünschte Tabellenstruktur aus der frm-Datei wiederhergestellt wurde. Es ist zu beachten, dass wir bei diesem Vorgang die ibd-Datei nicht verwendet haben. Fassen Sie die Schritte zum Wiederherstellen der Tabellenstruktur mithilfe von FRM-Dateien zusammen: 1. Erstellen Sie zunächst eine Tabelle mit demselben Namen und starten Sie dann die Instanz 2. Verwenden Sie die gesicherte FRM-Datei, um die generierte FRM-Datei zu ersetzen, und starten Sie die Instanz neu 3. Überprüfen Sie das Fehlerprotokoll und ermitteln Sie die Anzahl der Felder m in der gesicherten frm-Datei aus dem Fehlerprotokoll 4. Erstellen Sie die Tabelle mit demselben Namen neu, stellen Sie sicher, dass die Anzahl der Felder m beträgt und mit der Sicherungstabelle übereinstimmt, und kopieren Sie die Sicherungs-FRM-Datei erneut in das entsprechende Verzeichnis 5. Ändern Sie den Parameter innodb_force_recovery=6 in der Instanzkonfigurationsdatei und starten Sie dann die Datenbank neu. Sie können die entsprechende Anweisung zum Erstellen der Tabellenstruktur sehen. Wir speichern sie und verwenden sie beim Wiederherstellen der Daten im nächsten Schritt. Dieser Schritt ist sehr wichtig 6. Kommentieren Sie den Parameter innodb_force_recovery=6 aus, verwenden Sie erneut den Standardwert und starten Sie die Datenbank neu, um die Wiederherstellung der Tabellendaten vorzubereiten. An diesem Punkt wurde die Tabellenstruktur wiederhergestellt. Lassen Sie mich den Parameter innodb_force_recovery erklären. Der Maximalwert dieses Parameters ist 6. Auf dieser Ebene werden nur einige Abfragefunktionen unterstützt und DML wird nicht unterstützt. Wie der Name schon sagt, wird dieser Parameter in einigen erzwungenen Wiederherstellungsszenarien verwendet. Im Allgemeinen kann dieser Parameter weggelassen und der Standardwert verwendet werden. Studierende, die mehr erfahren möchten, können die offizielle Dokumentation zu Rate ziehen. IBD-DateiwiederherstellungstabellendatenNachdem der vorherige Schritt abgeschlossen ist, haben wir die entsprechende Tabellenstruktur erhalten. Sehen wir uns nun an, wie die Tabellendaten wiederhergestellt werden. Die Methode zum Wiederherstellen von Tabellendaten ist relativ einfach. Die allgemeinen Schritte lauten wie folgt: 1. Verwenden Sie die im vorherigen Schritt erhaltene Anweisung zur Tabellenerstellung, um eine Tabelle neu zu erstellen, und führen Sie dann Folgendes aus: Leertabelle AAA für den Export; Diese Syntax wird verwendet, um die Daten in der Tabelle auf die Festplatte zu schreiben und die Sperre der Tabelle zu erhalten, um sie für die nachfolgende Wiederherstellung vorzubereiten. 2. Dann verwenden wir die folgende Anweisung: Tabelle aaa ändern, Tabellenbereich verwerfen; Diese Anweisung löscht die aktuelle ibd-Datei. 3. Anschließend verwenden wir die zuvor gesicherte ibd-Datei und kopieren sie in das entsprechende Instanzverzeichnis 4. Laden Sie abschließend die ibd-Datei erneut und verwenden Sie die folgende Anweisung: Tabelle ändern aaa, Tablespace importieren; Starten Sie die Datenbank neu und unsere Daten werden erfolgreich wiederhergestellt. KurzzusammenfassungDer gesamte Wiederherstellungsprozess wurde vorgestellt. Der cleverere Teil besteht darin, die Tabellenstrukturinformationen aus der frm-Datei zu erhalten. Wir haben die Methode zum zweimaligen Zusammensetzen der Tabellenerstellungsanweisung verwendet und schließlich die Tabellenstruktur der wiederherzustellenden Tabelle erhalten. Anschließend haben wir die Methoden „Alter Table Discard Tablespace“ und „Alter Table Import Tablespace“ verwendet, um die Daten in der Tabelle wiederherzustellen. Der gesamte Vorgang sieht kompliziert aus, aber tatsächlich können Sie ein Skript entsprechend den Schritten abstrahieren. Auf diese Weise müssen Sie bei der nächsten Wiederherstellung nur den Namen der wiederherzustellenden Tabelle eingeben und können die Tabellenstruktur und die Daten schnell wiederherstellen. Dies kann als Notfallplan zur Datenwiederherstellung angesehen werden. Oben finden Sie Einzelheiten dazu, wie MySQL frm- und ibd-Dateien verwendet, um Tabellendaten wiederherzustellen. Weitere Informationen zur Wiederherstellung von MySQL-Tabellendaten finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So fügen Sie Docker ein Zertifikat hinzu
>>: Webdesign-Kenntnisse: Hohe Rankingprobleme bei gemischten chinesischen und englischen Webseiten
Inhaltsverzeichnis Vorwort 1. So stornieren Sie e...
In diesem Artikel wird der spezifische Code von R...
Ergebnisse erzielen Implementierungscode html <...
Webformulare sind der primäre Kommunikationskanal...
Es ist auch sehr einfach, Django-Projekte mit Doc...
Überblick Ich habe vor Kurzem begonnen, mir Wisse...
Inhaltsverzeichnis Login-Geschäftsprozess Impleme...
Eigentlich ist das ganz einfach. Wir fügen ein a-...
Heutzutage wird die Bildschirmauflösung von Compu...
Inhaltsverzeichnis Vorwort Was ist Hot Change Coc...
Win10 + Ubuntu 20.04 LTS Dual-System-Installation...
Inhaltsverzeichnis Einführung Nachfolgend sehen S...
Vorwort Dieser Artikel stellt hauptsächlich den r...
In diesem Artikel wird der spezifische Code von J...
Lassen Sie mich zunächst die Bedeutung einiger Fe...