Heim  >  Artikel  >  Datenbank  >  Einführung in die Methode der MySQL-Datenwiederherstellung über Binlog (Codebeispiel)

Einführung in die Methode der MySQL-Datenwiederherstellung über Binlog (Codebeispiel)

不言
不言nach vorne
2019-01-07 10:42:115560Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in die Methode der MySQL-Datenwiederherstellung über Binlog (Codebeispiel). Ich hoffe, dass er für Freunde hilfreich ist Dir. Hilft.

Wenn Sie die relevante Konfiguration von Binlog-Protokollen verstehen, können Sie den Datenwiederherstellungsvorgang der Datenbank einfach über Binlog beherrschen;

MySQL-Protokolldatei

Jede ausgereifte Software verfügt über ein ausgereiftes Protokollsystem. Wenn ein Problem mit der Software auftritt, sind diese Protokolle eine Fundgrube für die Abfrage der Ursache des Problems. Ebenso ist MySQL keine Ausnahme. Es wird auch eine Reihe von Protokollen geben, die den Ausführungsstatus von MySQL aufzeichnen.

MySQL verfügt hauptsächlich über die folgenden Protokolltypen:

  • Fehlerprotokoll: Zeichnet Fehlerinformationen während des MySQL-Betriebs auf

  • Allgemeines Abfrageprotokoll: Zeichnen Sie die Anweisungen auf, die MySQL ausführt, einschließlich jeder SQL-Abfrage, Änderung, Aktualisierung usw.

  • Langsames Abfrageprotokoll: Zeichnen Sie die SQL-Anweisungen auf, deren Abfrage zeitaufwändig ist

  • Binlog-Protokoll: Zeichnet Datenänderungsdatensätze auf, einschließlich Tabellenerstellung, Datenaktualisierungen usw.

Diese Protokolle müssen im my konfiguriert werden .cnf-Datei, wenn Sie MySQL nicht kennen. Der Pfad der Konfigurationsdatei kann mit dem MySQL-Befehl

mysql --verbose --help|grep -A 1 'Default options’ #该命令会罗列出my.cnf 顺序查找的路径。

binlog log

binlog ist das Binärprotokoll. eine binäre Protokolldatei, die alle Datenbankaktualisierungsanweisungen aufzeichnet, einschließlich Tabellenaktualisierungen und Datensatzaktualisierungen, nämlich die Datenmanipulationssprache (DML). Binlog wird hauptsächlich zur Datenwiederherstellung und Konfiguration der Master-Slave-Replikation verwendet

Datenwiederherstellung: Wenn die Datenbank versehentlich gelöscht wird oder etwas Unbeschreibliches passiert, können die Daten zu einem bestimmten Zeitpunkt über Binlog wiederhergestellt werden.
  • Master-Slave-Replikation: Bei einer Datenbankaktualisierung zeichnet die Master-Datenbank über Binlog auf und benachrichtigt die Slave-Datenbank zur Aktualisierung, wodurch sichergestellt wird, dass die Daten der Master-Slave-Datenbank konsistent sind.
  • Mysql ist entsprechend seinen Funktionen in Service-Layer-Module und Storage-Engine-Layer-Module unterteilt. Die Service-Schicht ist für die Client-Verbindung, die Optimierung der SQL-Anweisungsverarbeitung und andere Vorgänge verantwortlich Die Speicher-Engine-Schicht ist für die Datenspeicherung und -abfrage verantwortlich. Binlog gehört zum Service-Layer-Modul. Das Protokoll ist unabhängig von der Engine und alle Datenänderungen der Daten-Engine werden im Binlog-Protokoll aufgezeichnet. Wenn die Datenbank abstürzt und die InnoDB-Engine verwendet wird, kann das Binlog-Protokoll auch den Festschreibungsstatus des InnoDB-Redo-Protokolls überprüfen.

Binlog-Protokoll aktiviert

Protokoll aktivierte Methode:

1 Konfiguration hinzufügen

log_bin=ON
log_bin_basename=/path/bin-log
log_bin_index=/path/bin-log.index
2. Legen Sie einfach den Log-Bin-Parameter

 log-bin=/path/bin-log
fest. Wenn Binlog aktiviert ist, erstellt MySQL eine durch log_bin_index angegebene .index-Datei und mehrere von MySQL verwendete Binlog-Dateien werden der Reihe nach im Index aufgezeichnet. Das Binlog-Protokoll verwendet den angegebenen Namen (oder Standardwert) plus eine erhöhte Zahl als Suffix, z. B. bin-log.000001. Wenn die folgenden drei Situationen auftreten, wird das Binlog-Protokoll wiederhergestellt:

The Die Dateigröße erreicht den Wert des Parameters max_binlog_size

Führen Sie den Befehl „Flush Logs“ aus

Starten Sie den MySQL-Dienst neu


Binlog-Protokollformat

Durch den Wert des Parameter binlog_format Parameter, Sie können das Binlog-Format festlegen, einschließlich Anweisung, Zeile, gemischt

  * statement 格式:记录数据库执行的原始 SQL 语句
  * row 格式:记录具体的行的修改,这个为目前默认值
  * mixed 格式:因为上边两种格式各有优缺点,所以就出现了 mixed 格式

Binlog-Protokollanzeigetool: mysqlbinlog

Weil Binlog ein ist Binärdatei und kann nicht wie andere Dateien direkt geöffnet und angezeigt werden. MySQL bietet jedoch das Binlog-Anzeigetool mysqlbinlog, das Binärdateien analysieren kann. Natürlich sind die Ergebnisse der Protokollanalyse in verschiedenen Formaten unterschiedlich;

1. statement 格式日志,执行 mysqlbinlog  /path/bin-log.000001,可以直接看到原始执行的 SQL 语句
2. row格式日志,则可读性没有那么好,但仍可通过参数使文档更加可读 mysqlbinlog -v  /path/bin-log.000001
Zwei Paare sehr wichtiger Parameter von mysqlbinlog

  1. --start-datetime  --stop-datetime 解析某一个时间段内的binlog;
  2. --start-position  --stop-position   解析在两个position之间的binlog;

Verwenden Sie binlog, um Daten wiederherzustellen:

Die Verwendung von Binlog zum Wiederherstellen von Daten besteht im Wesentlichen darin, alle DML-Vorgänge über Binlog zu finden, fehlerhafte SQL-Anweisungen zu entfernen und dann den langen Marsch zu wiederholen, um die Daten wiederherzustellen

Praktische Offline-Operation:

Erstellen Sie eine Datentabelle und fügen Sie den Anfangswert ein

    CREATE TABLE `users` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `age` int(8) DEFAULT NULL,
              PRIMARY KEY (`id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
     INSERT INTO `users` (`id`, `name`, `age`)
        VALUES
            (null, '姓名一', 5);
Finden Sie die Position der Datenbank und des Binlogs der letzten vollständigen Sicherung (ps: natürlich kann sie auch im Laufe der Zeit wiederhergestellt werden) . Hier wird der aktuelle Status als Anfangswert der Sicherung verwendet.

    mysqldump -uroot -p T > /path/xxx.sql;   # 备份数据库
    show master status;   # 查看当前的position位置,此时值为154
hat mehrere Datensätze eingefügt.

  INSERT INTO `users` (`id`, `name`, `age`)
  VALUES
     (null, '姓名二', 13),
     (null, '姓名三', 14),
     (null, '姓名四', 15),
     (null, '姓名五', 16),
     (null, '姓名六', 17);
hat einen Fehler gemacht und mehrere Daten nach dem Fehler eingefügt 🎜> Führen Sie nach einer Fehlbedienung eine Datenwiederherstellung durch. Stoppen Sie zunächst den externen Dienst von MySQL und verwenden Sie die Sicherungsdaten, um die letzten Daten wiederherzustellen.

Analysieren Sie die Binärdatei mit dem Befehl mysqlbinlog. Die Analyse ergab, dass dies der Fall ist

update users set age = 5;
 INSERT INTO `users` (`id`, `name`, `age`)
 VALUES
    (null, '姓名七', 16),
    (null, '姓名八', 18);
über mysqlbinlog Der Befehl exportiert die ausführbare SQL-Datei aus dem Binlog-Protokoll und importiert die Daten in mysql

    误操作发生在position为706位置,且上次正常操作的结束位置在513
    在1152到结尾位置有正常执行的SQL执行
, um die falsche Update-Anweisung zu überspringen und dann die nachfolgenden normalen Anweisungen erneut auszuführen durch die Logik von Schritt 7, um die Datenwiederherstellungsarbeit abzuschließen

Zusammenfassung

Egal zu welcher Zeit, ein Datenbankabsturz wird die Leute stirnrunzeln und verärgern lassen. Man kann sagen, dass Binlog unter verschiedenen Umständen eine bedauerliche Medizin nach einem Datenbankabsturz und Datenverlust ist. In diesem Artikel wird lediglich ein Datenwiederherstellungsexperiment in einer Offline-Umgebung durchgeführt. Bitte geben Sie mir einen Rat 🎜 >Dieser Artikel endet hier. Weitere Informationen zu MySQL finden Sie in der Spalte

MySQL-Tutorial auf der chinesischen PHP-Website! ! !

Das obige ist der detaillierte Inhalt vonEinführung in die Methode der MySQL-Datenwiederherstellung über Binlog (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen