Wiederherstellung und Wiederherstellung von MySQL BinLog-Daten

Blog-Verzeichnis


Status anzeigen

Überprüfen Sie den Binlog-Schalter und den Speicherpfad

show variables like '%log_bin%';

Fügen Sie hier eine Bildbeschreibung ein

Zeigen Sie die Binlog-Konfiguration an, z. B. das Speicherformat binlog_format

show variables like '%binlog_%';

Fügen Sie hier eine Bildbeschreibung ein

Derzeit vorhandene Protokolle anzeigen

show master logs;

Fügen Sie hier eine Bildbeschreibung ein

Sehen Sie sich die derzeit verwendeten Protokolle an

show master status;

Fügen Sie hier eine Bildbeschreibung ein

Protokoll wechseln

flush logs;

OK-Protokoll

Bestimmen Sie die Protokolldatei

Gehen Sie zum binlog-Protokollverzeichnis und können Sie anhand der Betriebszeit und der Protokollzeit bestätigen, in welchem ​​Protokoll der Datensatz gespeichert ist.

Umschreiben des Protokollformats

Verwenden Sie im Protokollverzeichnis das mit MySQL gelieferte Tool mysqlbinlog, um das Binärprotokoll zur einfachen Suche in ein Textprotokoll umzuwandeln.

mysqlbinlog binlog.000016 > binlog.bak

Kurze Beschreibung des Protokolls

Das Binlog-Protokoll wird in Ereigniseinheiten geschrieben, wobei „at“ der Anfang des Protokolls ist und der Inhalt zwischen den beiden „at“ ein vollständiges Ereignis ist

Das Folgende ist ein aus dem Protokoll extrahierter Abschnitt. Es handelt sich um das Zielprotokoll, das durch Suchen nach dem Inhalt tzh_ths_benchmark in binlog.bak gefunden wurde. Um die Anzeige zu erleichtern, wird ein Trennzeichen hinzugefügt, um jedes Protokoll zu trennen. Die Zahl danach at ist dieses Protokoll. Der Startpunkt von, die Zahl nach end_log_pos ist der Endpunkt dieses Protokolls, die nächste Zeile von at ist das Datum und die Uhrzeit des Ereignisses, die basierend auf der Betriebszeit und dem folgenden Inhalt positioniert werden können sind die spezifischen Protokolldaten. Jedes Protokoll beginnt mit dem Zeichen < a i=1> als Endmarkierung/*!*/;

'/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361652921
#231208 11:07:08 server id 1  end_log_pos 361652952 CRC32 0x2f4eae24    Xid = 44300746
COMMIT/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361652952
#231208 15:43:25 server id 1  end_log_pos 361653031 CRC32 0x32ff5692    Anonymous_GTID  last_committed=753211   sequence_number=753212  rbr_only=no     original_committed_timestamp=1702021405548520   immediate_commit_timestamp=1702021405548520     transaction_length=1604
# original_commit_timestamp=1702021405548520 (2023-12-08 15:43:25.548520 CST)
# immediate_commit_timestamp=1702021405548520 (2023-12-08 15:43:25.548520 CST)
/*!80001 SET @@session.original_commit_timestamp=1702021405548520*//*!*/;
/*!80014 SET @@session.original_server_version=80030*//*!*/;
/*!80014 SET @@session.immediate_server_version=80030*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361653031
#231208 15:43:25 server id 1  end_log_pos 361654556 CRC32 0x07b1e62c    Query   thread_id=100812        exec_time=0     error_code=0    Xid = 44313321
SET TIMESTAMP=1702021405/*!*/;
SET @@session.foreign_key_checks=0/*!*/;
/*!80013 SET @@session.sql_require_primary_key=0*//*!*/;
CREATE TABLE `tzh_ths_benchmark_copy1` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '参数类型: FILL:填写, CAlC:计算',
  `relation` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '指标类型, SIMPLE:简单指标, MERGED:组合指标',
  `status` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '关联状态: LINKED:已关联, UNLINKED:未关联',
  `parameter_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '数据类型的id, 可由此拿到排放类型的一二级id',
  `merge_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '合并组的id',
  `energy_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '数据类型关联的耗能项',
  `formula_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '数据类型关联的耗能项的公式',
  `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '排放名称, 可认为是指标名称',
  `formula` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '组合指标的消耗量计算公式, id+/-id, 包含关联项和关联关系',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=220 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='新能源云-碳核算-指标(参数关联)'
/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361654556
#231208 15:43:25 server id 1  end_log_pos 361654635 CRC32 0xd4b43d02    Anonymous_GTID  last_committed=753212   sequence_number=753213  rbr_only=yes    original_committed_timestamp=1702021405568586   immediate_commit_timestamp=1702021405568586     transaction_length=2068
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=1702021405568586 (2023-12-08 15:43:25.568586 CST)
# immediate_commit_timestamp=1702021405568586 (2023-12-08 15:43:25.568586 CST)
/*!80001 SET @@session.original_commit_timestamp=1702021405568586*//*!*/;
/*!80014 SET @@session.original_server_version=80030*//*!*/;
/*!80014 SET @@session.immediate_server_version=80030*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361654635
#231208 15:43:25 server id 1  end_log_pos 361654712 CRC32 0x44693e7a    Query   thread_id=100812        exec_time=0     error_code=0
SET TIMESTAMP=1702021405/*!*/;
BEGIN
/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361654712
#231208 15:43:25 server id 1  end_log_pos 361654808 CRC32 0x53c97542    Table_map: `carbon`.`tzh_ths_benchmark_copy1` mapped to number 1003
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361654808
#231208 15:43:25 server id 1  end_log_pos 361656593 CRC32 0x0348b3f8    Write_rows: table id 1003 flags: STMT_END_F

BINLOG '
HclyZRMBAAAAYAAAABhqjhUAAOsDAAAAAAEABmNhcmJvbgAXdHpoX3Roc19iZW5jaG1hcmtfY29w
eTEACggPDw8ICAgIDw8KIAAgACAAgAD8AwAAAQH4AgP8/wBCdclT
HclyZR4BAAAA+QYAABFxjhUAAOsDAAAAAAMAAgAK//8AAAkAAAAAAAAABEZJTEwGU0lNUExFCFVO
TElOS0VEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAABEZJTEwG
:

Bestimmen Sie den Speicherort des Protokolls

Der Zielvorgangsdatensatz kann mit dem Befehl less aus der Textdatei abgerufen werden

  • less binlog.bak: Öffnen Sie das Protokoll im Less-Modus
  • /xxxxx, Suchen Sie die Zeichenfolge xxxxx im Protokoll
  • Taste N: zum nächsten xxxxx springen
  • Tastenkombination Umschalt + N, zum vorherigen xxxxx springen
  • Taste G: Zum Anfang der Textdatei springen
  • Tastenkombination Umschalt + G, zum Ende der Textdatei springen

Protokolle nach Ereignis anzeigen

Nehmen Sie die Position 361652952 als Startpunkt und listen Sie die nachfolgende Ereignisliste auf, einschließlich der Startposition Pos und der Endposition End_log_pos, entsprechend der Textdatei eins zu eins

show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
show binlog events IN 'binlog.000016' FROM 361652952;

Fügen Sie hier eine Bildbeschreibung ein

Protokolle analysieren

Der Zweck dieses Rollbacks besteht darin, die Tabelle tzh_ths_benchmark und ihre Daten wiederherzustellen. Da sich der geplante Vorgang in Navicat befindet, wird die Tabelle nach tzh_ths_benchmark_copy1 kopiert und anschließend die kopierte Tabelle geändert. Dadurch wird die ursprüngliche Tabelle versehentlich geändert , was zu Datenverlust führt...

Der Plan für diese Wiederherstellung besteht darin, die Schritte zum Kopieren der Tabelle im Binlog zu reproduzieren, die Tabelle tzh_ths_benchmark_copy1 wiederherzustellen und sie dann in die Originaltabelle umzubenennen. Der gesamte Prozess entspricht dem unten ausgewählten Inhalt, und der Kern ist die Erstellung der Tabelle und das Write_rows-Ereignis. Die endgültige Bestimmung der Datenwiederherstellung dieses Mal. Der Binlog-Startpunkt und der Endpunkt sind 361653031 bzw. 361656701.

Fügen Sie hier eine Bildbeschreibung ein

Daten wiederherstellen

Stellen Sie die Daten gemäß den bestätigten Start- und Endpunktpositionen wieder her. Aktualisieren Sie nach der Ausführung die Datenbank und Sie werden sehen, dass tzh_ths_benchmark_copy1 zurückgegeben wurde und die Daten ebenfalls vorhanden sind.

mysqlbinlog -v binlog.000016 --start-position=361653031 --stop-position=361656701 | mysql -uroot -p123456

Guess you like

Origin blog.csdn.net/mrathena/article/details/134954918