msyql schneidet Wiederherstellungsdaten ab

Ich hatte das Glück, durch Zufall etwas über Binlog zu erfahren. Ich habe versehentlich alle Daten in einer bestimmten Bibliothek gelöscht.

  1. Suchen Sie zuerst das MySQL-Datenspeicherverzeichnis.
    Wenn es von Docker gestartet wird, können Sie es über Docker Inspect oder Docker-Compose finden.
    Wenn es nicht von Dockers bereitgestellt wird, können Sie den Startvorgang über Folgendes finden: ps -ef | grep mysql

  2. Suchen Sie das Protokollverzeichnis:
    Die Datei hat dieses Format: mysql-bin.0000xx
    ll -t Machen Sie ein Bild in umgekehrter chronologischer Reihenfolge und nehmen Sie die oberste Protokolldatei auf, zum Beispiel: mysql-bin.000020

  3. Sobald die Protokolldateien gefunden sind, müssen die wiederherzustellenden Daten getrennt werden

  4. 1 Bestimmen Sie die Zeit, die Datenbank oder die Tabelle

  5. 2 Wenn es sich um gelöschte Daten handelt, müssen Sie das vorherige Protokoll entfernen und alle vorherigen Daten wiederherstellen.

  6. Die angegebene Datenbank wird in SQL wiederhergestellt
    , z. B. „database: data-analysis“
    und dann der Befehl:

# 方法一:指定数据库从日志导出sql
  mysqlbinlog -u pico -p --database=data-analysis  -vv /data/mysql/log/mysql-bin.000020  >/row-data-analysis.sql
# 方法二:指定数据库,和结束时间,从日志导出sql,如果不记得时间,可以先全部导出,再把出错的sql删除
  mysqlbinlog -u pico -p --database=data-analysis --stop-datetime "2022-06-06 17:16:03"  -vv /data/mysql/log/mysql-bin.000020  >/row-data-analysis.sql
# 方法三:指定数据库,和结束位置,从日志导出sql;这个位置,在日志里可以找到,position可以再日志文件里找到,日志已经一般比较大,所有用方法一最好
  mysqlbinlog -u pico -p --database=data-analysis --stop-position 67840048  -vv /data/mysql/log/mysql-bin.000020  >/row-data-analysis.sql
# 在mysql 5.7 后增加了--rewrite-db 的参数,可以替换数据库名,
  mysqlbinlog -u pico -p --database=data-analysis-2 --rewirite-db "data-analysis->data-analysis-2"  -vv /data/mysql/log/mysql-bin.000020  >/row-data-analysis.sql

Parameter- und Befehlsbeschreibung:
Weitere Informationen finden Sie in diesem Blogger, sehr detailliert: https://blog.csdn.net/line_on_database/article/details/115487650

-d, --database=name      仅显示指定数据库的转储内容。
-o, --offset=#           跳过前N行的日志条目。
-r, --result-file=name   将输入的文本格式的文件转储到指定的文件。
-s, --short-form         使用简单格式。
--set-charset=name       在转储文件的开头增加'SET NAMES character_set'语句。
--start-datetime=name    转储日志的起始时间。
--stop-datetime=name     转储日志的截止时间。
-j, --start-position=#   转储日志的起始位置。
--stop-position=#        转储日志的截止位置。
--vv                      重建为带注释的语句
  1. SQL importieren

Es wird nicht empfohlen, hier die Quellbibliothek zu verwenden. Sie können eine neue Datenbank erstellen, z. B. den Datenbanknamen in der generierten SQL-Datei ersetzen, oder eine neue MSYQL erstellen (hier, wenn Sie –rewrite-db verwenden, um den Datenbanknamen neu zu schreiben, Sie können die Quellbibliothek direkt importieren, aber überprüfen Sie sie sorgfältig. Überprüfen Sie
nach dem Import, ob die Daten wiederhergestellt sind, bestätigen Sie, dass die Daten korrekt sind, exportieren Sie sie und importieren Sie sie dann in die Produktionsbibliothek:
mysql -u root -p <row -data-analysis.sql

Beachten Sie das Problem des Primärschlüssels: Wenn er sich selbst inkrementiert, muss der Primärschlüssel auf Folgendes zurückgesetzt werden: Ich habe die UUID hier geschrieben, und es wird kein Problem mit dem Primärschlüssel geben

おすすめ

転載: blog.csdn.net/qq_28911061/article/details/125696927