Lösen Sie das Problem des MySQL-Datenverlusts, wenn Docker Redis neu startet

Lösen Sie das Problem des MySQL-Datenverlusts, wenn Docker Redis neu startet

Amtliche Dokumentation:

Daher sollte MySQL wie folgt gestartet werden:

docker run -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD=Passwort -v /Windows-Laufwerk/angegebener Ordnerpfad:/var/lib/mysql mysql:5.7

Redis:

docker run -p 6379:6379 -d -v /Windows-Laufwerk/angegebener Ordnerpfad:/Daten redis:5.0 redis-server --appendonly yes

Lesen Sie weitere offizielle Dokumente, die detaillierte Anweisungen enthalten

Zusatzwissen: Docker mountet Dateien in den Container und ändert sich nach der Änderung nicht, daher muss es neu gestartet werden

Heute habe ich ein sehr seltsames Phänomen festgestellt. Nachdem ich die Datei auf dem Host in Docker gemountet hatte, löschte ich die Datei auf dem Host und lud die Datei mit demselben Namen erneut hoch, aber die Datei im Container wurde nicht synchronisiert.

Lassen Sie uns zuerst über Linux sprechen. Der Linux-Speicher ist in iNode und Block unterteilt. iNode speichert die Attributinformationen der Datei, z. B. Größe und Speicherort auf der Festplatte. Block ist ein 4-Kilobyte-Block, der die tatsächlichen Informationen der Datei speichert. Dateien mit einer Größe von weniger als 4 KB belegen auch 4 KB Speicherplatz.

Nachdem wir das oben Gesagte verstanden haben, sprechen wir über Docker. Die in Docker gemountete Datei ist eigentlich ein von Docker gespeicherter iNode. Über diesen iNode kann er den Block finden, also die eigentlichen Dateiinformationen. Wenn Sie > verwenden, um eine Umleitung zum Schreiben der Datei anzuhängen, kann sie mit Docker synchronisiert werden. Wenn Sie sie jedoch mit rm umbenennen, ändert sich der iNode der Datei, aber der iNode in Docker zeigt immer noch auf den vorherigen Speicherort auf der Festplatte, sodass sich die Datei nicht geändert hat.

rm-Prinzip: rm löscht nur den iNode. Ohne den iNode kann der Block auf der Festplatte nicht auf normale Weise gefunden werden. Es sieht so aus, als wäre er gelöscht worden, aber die Dateiinformationen sind immer noch da. Die Dateiinformationen werden beim nächsten Schreiben hier überschrieben. Daher gibt es eine Möglichkeit, die gelöschten Daten wiederherzustellen. Wenn die Datei jedoch beim Löschen geöffnet ist, wird die Datei nicht gelöscht.

Dasselbe gilt für vim. Wenn Sie eine vim-Datei erstellen, kopiert sie die vorhandene Datei. Es wird eine Datei im Verzeichnis derselben Ebene geben, die mit . beginnt und mit swp endet. Wenn Sie speichern und beenden, löscht vim die Quelldatei und benennt diese Datei in den Namen der Quelldatei um, und der iNode ändert sich natürlich.

Der obige Artikel zur Lösung des Problems des MySQL-Datenverlusts beim Neustart von Redis in Docker ist der gesamte Inhalt, den der Herausgeber mit Ihnen teilt. Ich hoffe, er kann Ihnen als Referenz dienen, und ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen.

Das könnte Sie auch interessieren:
  • Spring Boot löst das Problem des Redis-Cache + MySQL-Batch-Speichers für die hochparallele Datenspeicherung
  • So stellen Sie die Datenkonsistenz zwischen MySQL und Redis sicher
  • Python extrahiert regelmäßig Daten aus Mysql und speichert sie in Redis
  • Detaillierte Erläuterung des Anwendungsfalls des Hot- und Cold-Datenaustauschs durch die Kombination von PHP mit Redis + MySQL
  • PHPs Laravel-Framework kombiniert mit MySQL- und Redis-Datenbankbereitstellung
  • So migrieren Sie eine Datenbank von MySQL zu Redis
  • So verbinden Sie Python mit MySQL, MongoDB, Redis, Memcache und anderen Datenbanken
  • Datenkonsistenzprobleme zwischen MySQL und Redis

<<:  Informationen zum Konfigurationsproblem bei der Verbindung von MyBatis mit der MySql8.0-Version

>>:  XHTML 1.0-Referenz

Artikel empfehlen

JS-Implementierung des Apple-Rechners

In diesem Artikelbeispiel wird der spezifische JS...

Sieben Möglichkeiten zur Implementierung der Array-Deduplizierung in JS

Inhaltsverzeichnis 1. Verwenden von Set()+Array.f...

Dieser Artikel zeigt Ihnen, wie Sie mit CSS-Kombinationsselektoren spielen

CSS-Kombinationsselektoren umfassen verschiedene ...

Tab-Effekte mit JS schreiben

In diesem Artikelbeispiel wird der spezifische Co...

Ausführliche Erklärung zu Slots und Filtern in Vue

Inhaltsverzeichnis Spielautomaten Was sind Slots?...

Implementierung von TypeScript im React-Projekt

Inhaltsverzeichnis 1. Einleitung 2. Nutzung Zusta...

Einführung in das Batch-Cache-Löschskript von nginx proxy_cache

Vorwort: Ich habe zuvor den offiziellen Proxy-Cac...

Detaillierte Erklärung gängiger Docker-Befehle

1. Hilfe-Befehl 1. Aktuelle Docker-Version anzeig...

JavaScript zum Erreichen aller oder umgekehrter Auswahlfunktionen

In diesem Artikel wird der spezifische JavaScript...

Hast du genau verstanden Schlagworte Definition Verwendung

Vorwort : Heute wurde ich gefragt: „Haben Sie das ...

Detaillierte Erklärung des MySQL-Triggerbeispiels

Inhaltsverzeichnis Was ist ein Auslöser Erstellen...

Beispiel für eine Vue-Datenanzeige auf einem großen Bildschirm

Um die Anforderungen effizient zu erfüllen und au...