MISCONF Redis ist so konfiguriert, dass RDB-Snapshots gespeichert werden

366

Beim Schreiben in Redis ( SET foo bar) wird folgende Fehlermeldung angezeigt:

MISCONF Redis ist zum Speichern von RDB-Snapshots konfiguriert, kann jedoch derzeit nicht auf der Festplatte gespeichert werden. Befehle, die den Datensatz ändern können, sind deaktiviert. Bitte überprüfen Sie die Redis-Protokolle auf Details zum Fehler.

Grundsätzlich verstehe ich, dass das Problem darin besteht, dass redis keine Daten auf der Festplatte speichern kann, aber keine Ahnung hat, wie das Problem behoben werden kann.

Auch die folgende Frage hat das gleiche Problem, sie wurde vor langer Zeit ohne Antworten und höchstwahrscheinlich ohne Versuche, das Problem zu lösen, aufgegeben.

Salvador Dali
quelle
konnten Sie dieses Problem beheben? Wenn ja, können Sie bitte bei den Schritten behilflich sein. Weil das Platzieren der rdb-Datei irgendwo anders es nicht lösen würde, denke ich. Ich denke, ich vermisse hier etwas
ankur
4
Dieser Fehler tritt auf, wenn der Redis-Server in einem Verzeichnis gestartet wird, in dem Redis keine Berechtigungen hat. Ich empfehle, nach der Behebung des Problems auf die Standardeinstellungen zurückzugreifen: Siehe Antwort zur Behebung dieses Problems.
Govind Rai
Zusätzlich zu Govind Rais Antwort: stackoverflow.com/a/47880440/5649620
Vyshnav Ramesh Thrissur
@GovindRai Ich habe Redis bereits die Erlaubnis erteilt, indem ich sowohl die Gruppe als auch den Besitzer geändert habe redis, aber es hilft nicht!
wdetac

Antworten:

184

Wenn Sie auf den Fehler stoßen und einige wichtige Daten auf der ausgeführten Redis-Instanz nicht verworfen werden können (Probleme mit Berechtigungen für die rdbDatei oder ihr Verzeichnis falsch oder nicht genügend Speicherplatz), können Sie die rdbzu schreibende Datei jederzeit an eine andere Stelle umleiten .

Mit redis-clikönnen Sie so etwas tun:

CONFIG SET dir /tmp/some/directory/other/than/var
CONFIG SET dbfilename temp.rdb

Danach möchten Sie möglicherweise einen BGSAVEBefehl ausführen , um sicherzustellen, dass die Daten in die rdbDatei geschrieben werden. Stellen Sie sicher , dass , wenn Sie ausführen INFO persistence, bgsave_in_progressbereits ist 0und rdb_last_bgsave_statusist ok. Danach können Sie die generierte rdbDatei an einem sicheren Ort sichern.

Axel Advento
quelle
7
rdb_bgsave_in_progress: 0 unter Persistence
thanikkal
Aus irgendeinem Grund wird der Befehl config set immer wieder geladen, wenn ich ihn versuche.
Bashar Abdullah
5
Für die Unglücklichen, die unter Windows arbeiten, mich im Moment und whoa die MSOpenTech-Version verwenden, müssen Sie den Verzeichnispfad wie folgt festlegen : dir C:/Temp/. Machen Sie eine bgsave, um zu überprüfen, ob es funktioniert ..
John P
@ John P, das war genau das, was getan werden musste. Vielen Dank!
Sam
2
127.0.0.1:6379> CONFIG SET dir / root / tool (Fehler) ERR Verzeichniswechsel: Berechtigung verweigert
Gank
316

Mit redis-clikönnen Sie den Versuch stoppen, den Schnappschuss zu speichern:

config set stop-writes-on-bgsave-error no

Dies ist eine schnelle Problemumgehung. Wenn Sie sich jedoch für die Daten interessieren, für die Sie sie verwenden, sollten Sie überprüfen, warum bgsave überhaupt fehlgeschlagen ist.

He zhe
quelle
21
Dies ist eine schnelle Problemumgehung, aber Sie sollten überprüfen, warum bgsave an erster Stelle fehlgeschlagen ist
Mandeep Singh
7
Wenn Sie Redis hauptsächlich für Caching und Sitzungen verwenden, ist dies ein Muss.
Jim
1
Ist das nicht gefährlich? Beispielsweise verwendet NodeBB Redis als Datenspeicher.
Codecowboy
2
@ LoveToCode Konfigurationssatz Stop-Writes-On-Bgsave-Fehler Ja
Phil
4
Immer wenn ich den Server neu starte, habe ich wieder das gleiche Problem. Dann muss ich es wieder einstellen. Wie kann ich es dauerhaft machen?
Zia Qamar
63

Während des bgsave-Vorgangs können aufgrund des geringen Speichers Fehler auftreten. Versuchen Sie dies (aus Redis Hintergrund speichern FAQ)

echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1
Chris
quelle
5
LInk: redis.io/topics/faq Suche danach: "Das Speichern des Hintergrunds schlägt mit einem fork () - Fehler unter Linux fehl, auch wenn ich viel freien RAM habe! "
Bruno Peres
49

Dieser Fehler tritt auf, weil BGSAVE fehlgeschlagen ist. Während BGSAVE gibt Redis einen untergeordneten Prozess aus, um die Daten auf der Festplatte zu speichern. Obwohl der genaue Grund für den Ausfall von BGSAVE anhand von Protokollen überprüft werden kann (normalerweise /var/log/redis/redis-server.logauf Linux-Computern), schlägt BGAVE häufig fehl, weil der Fork keinen Speicher zuweisen kann. Oft kann der Fork aufgrund einer widersprüchlichen Optimierung durch das Betriebssystem keinen Speicher zuweisen (obwohl auf dem Computer genügend RAM verfügbar ist).

Wie aus den Redis FAQ zu lesen ist :

Das Redis-Schema zum Speichern des Hintergrunds basiert auf der Copy-on-Write-Semantik von Fork in modernen Betriebssystemen: Redis Forks (erstellt einen untergeordneten Prozess), die eine exakte Kopie des übergeordneten Prozesses sind. Der untergeordnete Prozess speichert die Datenbank auf der Festplatte und wird schließlich beendet. Theoretisch sollte das Kind so viel Speicher verwenden, wie das übergeordnete Element eine Kopie ist. Dank der von den meisten modernen Betriebssystemen implementierten Semantik zum Kopieren beim Schreiben teilen sich der übergeordnete und der untergeordnete Prozess die gemeinsamen Speicherseiten. Eine Seite wird nur dupliziert, wenn sie sich im untergeordneten oder im übergeordneten Element ändert. Da sich theoretisch alle Seiten ändern können, während der untergeordnete Prozess gespeichert wird, kann Linux nicht im Voraus sagen, wie viel Speicher das untergeordnete Element benötigt. Wenn also die Einstellung overcommit_memory auf Null gesetzt ist, schlägt fork fehl, es sei denn, es ist so viel freier Arbeitsspeicher vorhanden wie erforderlich, um wirklich alle übergeordneten Speicherseiten zu duplizieren,

Wenn Sie overcommit_memory auf 1 setzen, sagt Linux, dass Linux sich entspannen und die Abzweigung optimistischer ausführen soll, und genau das möchten Sie für Redis.

Redis benötigt nicht so viel Speicher, wie das Betriebssystem denkt, um auf die Festplatte zu schreiben, und kann daher die Abzweigung vorbeugend ausfallen lassen.

Um dies zu beheben, können Sie:

Ändern /etc/sysctl.confund hinzufügen:

vm.overcommit_memory=1

Starten Sie dann sysctl neu mit:

Auf FreeBSD:

sudo /etc/rc.d/sysctl reload

Unter Linux:

sudo sysctl -p /etc/sysctl.conf
Bhindi
quelle
Die Ausgabe von systemctl status redisergab, dass eine Warnung vorliegt, die darauf hindeutet, die overcommit_memory=0Einstellung genau zu ändern . Das zu ändern löste tatsächlich das Problem für mich.
Abstrakter Algorithmus
Dies löste das Problem richtig und sollte die akzeptierte Antwort sein
DSynergy
Wenn tisr mit den Standardeinstellungen 10 GB RAM verwendet, müssen Sie 10 GB RAM frei haben, damit dieser untergeordnete Prozess ausgeführt werden kann.
Dan Hastings
@ DanHastings - Ja. Wenn Sie overcommit_memory auf 1 setzen, wird diese Anforderung gelockert.
Bhindi
26

Starten Sie Ihren Redis-Server neu.

  • macOS (brauen) : brew services restart redis.
  • Linux: sudo service redis restart /sudo systemctl restart redis
  • Windows: Windows + R-> Typ services.msc, Enter-> Suchen nach und Redisdann auf klicken restart.

Ich persönlich hatte dieses Problem, nachdem ich redis mit Brew ( brew upgrade) aktualisiert hatte . Nach dem Neustart des Laptops funktionierte es sofort.

Erowlin
quelle
Wenn jemand dies liest, hatte ich auch ein Problem mit Homebrew, aber nichts mit dem Upgrade zu tun: Ich musste den Dienst nur starten mit sudo: brew services stop redis; sudo brew services start redis.
Bfontaine
24

Wenn Sie auf einem Linux-Computer arbeiten, überprüfen Sie auch die Datei- und Ordnerberechtigungen der Datenbank.

Die Datenbank und der Pfad dazu erhalten Sie über:

in redis-cli:

CONFIG GET dir

CONFIG GET dbfilename

und in der Kommandozeile ls -l. Die Berechtigungen für das Verzeichnis sollten 755 und die für die Datei 644 sein . Normalerweise wird der Redis-Server auch als Benutzer ausgeführt redis. Daher ist es auch hilfreich, dem Benutzer redisdurch Ausführen das Eigentum an dem Ordner zu geben sudo chown -R redis:redis /path/to/rdb/folder. Dies wurde in der Antwort hier ausgeführt .

smilee89
quelle
Welche Berechtigungen sollten sie sein?
Stephen
Das hat bei mir funktioniert. Vielen Dank!
Lordwhizy
19

Vielen Dank an alle für die Überprüfung des Problems, anscheinend wurde der Fehler während erzeugt bgsave.

Für mich löste das Eingeben config set stop-writes-on-bgsave-error noeiner Shell und das Neustarten von Redis das Problem.

Salvador Dali
quelle
82
Das hat das Problem nicht "gelöst", sondern einfach ignoriert.
Buffalo
Das Neustarten von RedisServer in Services.msc hat bei mir funktioniert.
ViPuL5
Immer wenn ich den Server neu starte, habe ich wieder das gleiche Problem. Dann muss ich es wieder einstellen. Wie kann ich es dauerhaft machen?
Zia Qamar
@ZiaQamar, können Sie die Eigenschaft dauerhaft in redis.conf gesetzt, die höchstwahrscheinlich auf /etc/redis/redis.conf sein, setzen Sie "Stop-writes-on-bgsave-Fehler nicht"
Gaurav Tyagi
IMO definitiv nicht die Lösung. Sie weisen Redis lediglich an, diese Fehler nicht zu protokollieren. Aber die Fehler sind immer noch da ...
Erowlin
17

Starten Sie Redis Server in einem Verzeichnis, in dem Redis über Schreibberechtigungen verfügt

Die obigen Antworten werden Ihr Problem definitiv lösen, aber hier ist, was tatsächlich vor sich geht:

Der Standardspeicherort für die rdb.dumpDatei ist ./(das aktuelle Verzeichnis). Sie können dies in Ihrer redis.confDatei überprüfen . In dem Verzeichnis, in dem Sie den Redis-Server starten, wird daher eine dump.rdbDatei erstellt und aktualisiert.

Anscheinend haben Sie damit begonnen, den Redis-Server in einem Verzeichnis auszuführen, in dem Redis nicht über die richtigen Berechtigungen zum Erstellen der dump.rdbDatei verfügt.

Um die Sache noch schlimmer zu machen, können Sie mit redis den Server wahrscheinlich auch nicht herunterfahren, bis die rdb-Datei erstellt werden kann, um das ordnungsgemäße Speichern von Daten sicherzustellen.

Um dieses Problem zu lösen, müssen Sie mit redis-clidem dirSchlüssel in die aktive Redis-Client-Umgebung wechseln, diesen aktualisieren und seinen Wert auf Ihren Projektordner oder einen Ordner festlegen, in dem Nicht-Root-Benutzer Berechtigungen zum Speichern haben. Führen Sie dann aus BGSAVE, um die Erstellung der dump.rdbDatei aufzurufen .

CONFIG SET dir "/hardcoded/path/to/your/project/folder"
BGSAVE

(Nun, wenn Sie benötigen die dump.rdb Datei im Verzeichnis zu speichern , dass Sie den Server in, begannen dann werden Sie für das Verzeichnis Berechtigungen ändern müssen , so dass redis , um es schreiben. Sie können für die Suche Stackoverflow , wie das zu tun ).

Sie sollten nun in der Lage sein, den Redis-Server herunterzufahren. Beachten Sie, dass wir den Pfad fest codiert haben. Hardcoding ist selten eine gute Praxis und ich empfehle dringend, den Redis-Server von Ihrem Projektverzeichnis aus zu starten und die dir key back to. / `Zu ändern .

CONFIG SET dir "./"
BGSAVE

Auf diese Weise wird die Speicherauszugsdatei im Verzeichnis Ihres aktuellen Projekts und nicht im Projektverzeichnis des fest codierten Pfads erstellt, wenn Sie Redis für ein anderes Projekt benötigen.

Govind Rai
quelle
Stellen Sie sicher, dass Sie dem Nicht-Root-Benutzer die Berechtigung für das Verzeichnis erteilen, in dem die Speicherauszugsdatei gespeichert wird. In meinem Fall habe ich einen Benutzer, redisalso: sudo chown redis:redis /var/lib/redis
RoundOutTooSoon
13

Wenn Sie MacOS ausführen und kürzlich ein Upgrade auf Catalina durchgeführt haben, müssen Sie möglicherweise die brew services restart redisin dieser Ausgabe vorgeschlagenen Schritte ausführen .

Fush
quelle
12

Hatte diesen Fehler festgestellt und konnte aus dem Protokoll herausfinden, dass der Fehler darauf zurückzuführen ist, dass der Speicherplatz nicht ausreicht. Alle Daten, die in meinem Fall eingefügt wurden, wurden nicht mehr benötigt. Also habe ich versucht zu FLUSHALLEN. Da der redis-rdb-bgsave-Prozess ausgeführt wurde, war es nicht möglich, die Daten auch zu SPÜLEN. Ich folgte den folgenden Schritten und konnte fortfahren.

  1. Melden Sie sich bei redis client an
  2. Führen Sie den Konfigurationssatz stop-write-on-bgsave-error no aus
  3. Führen Sie flushall (gespeicherte Daten werden nicht benötigt)
  4. Führen Sie den Konfigurationssatz stop-write-on-bgsave-error yes aus

Der Prozess redis-rdb-bgsave wurde nach den obigen Schritten nicht mehr ausgeführt.

RCK
quelle
7

Ich war mit einem ähnlichen Problem konfrontiert. Der Hauptgrund dafür war der Speicherverbrauch (RAM) durch Redis. Mein EC2-Computer hatte 8 GB RAM (ca. 7.4 zum Verbrauch verfügbar)

Wenn mein Programm ausgeführt wurde, stieg die RAM-Auslastung auf 7,2 GB, so dass kaum ~ 100 MB RAM übrig blieben. Dies löst im Allgemeinen die aus MISCONF Redis error ...

Mit dem htopBefehl können Sie den RAM-Verbrauch ermitteln . Suchen Sie nach dem Mem- Attribut, nachdem Sie den Befehl htop ausgeführt haben. Wenn es einen hohen Verbrauch aufweist (wie in meinem Fall waren es 7,2 GB / 7,4 GB), ist es besser, die Instanzen mit größerem Speicher zu aktualisieren. In diesem Szenario stellt die Verwendung config set stop-writes-on-bgsave-error noeine Katastrophe für den Server dar und kann dazu führen, dass andere auf dem Server ausgeführte Dienste (falls vorhanden) gestört werden. Vermeiden Sie daher besser den Befehl config und UPGRADE YOUR REDIS MACHINE .

Zu Ihrer Information: Möglicherweise müssen Sie htop installieren , damit dies funktioniert:sudo apt-get install htop

Eine weitere Lösung hierfür kann ein anderer RAM-lastiger Dienst sein, der auf Ihrem System ausgeführt wird. Suchen Sie nach anderen Diensten, die auf Ihrem Server / Computer / Ihrer Instanz ausgeführt werden, und stoppen Sie ihn, falls dies nicht erforderlich ist. Um alle auf Ihrem Computer ausgeführten Dienste zu überprüfen, verwenden Sieservice --status-all

Und ein Vorschlag für Leute, die den Befehl config direkt einfügen, bitte recherchieren Sie ein wenig und warnen Sie den Benutzer zumindest, bevor Sie solche Befehle verwenden. Und wie @Rodrigo in seinem Kommentar erwähnte: "Es sieht nicht cool aus, die Fehler zu ignorieren."

---AKTUALISIEREN---

Sie können auch das Verhalten von Redis konfigurieren maxmemoryund maxmemory-policydefinieren, wenn eine bestimmte Speichergrenze erreicht ist. Wenn ich beispielsweise das Speicherlimit von 6 GB beibehalten und die zuletzt verwendeten Schlüssel aus der Datenbank löschen möchte, um sicherzustellen, dass die Verwendung von Redis Mem 6 GB nicht überschreitet, können wir diese beiden Parameter festlegen (in redis.conf oder CONFIG SET Befehl):

maxmemory 6gb
maxmemory-policy allkeys-lru

Es gibt viele andere Werte, die Sie für diese beiden Parameter festlegen können. Lesen Sie dazu hier: https://redis.io/topics/lru-cache

Bhatman
quelle
6

Eine dauerhaftere Lösung könnte darin bestehen, in /etc/redis/redis.conf in den Zeilen 200-250 nachzuschauen. Es gibt Einstellungen für die rdb-Funktionen, die in den 2.x Tagen nicht Teil von redis waren.

vor allem

dir ./

kann geändert werden zu

dir /home/someuser/redislogfiledirectory

oder Sie könnten alle Sicherungszeilen auskommentieren und sich keine Sorgen um die Persistenz machen. (Siehe die Kommentare in /etc/redis/redis.conf)

Vergiss auch nicht

service redis-server stop
service redis-server start
Suppenbecher
quelle
6

Alle diese Antworten erklären nicht den Grund, warum das Speichern der RDB fehlgeschlagen ist.


Als mein Fall überprüfte ich das Redis-Protokoll und fand:

14975: M 18 Jun 13: 23: 07.354 # Hintergrundspeicherung durch Signal 9 beendet

Führen Sie den folgenden Befehl im Terminal aus:

sudo egrep -i -r 'killed process' /var/log/

es zeigt an:

/var/log/kern.log.1:Jun 18 13:23:07 10-10-88-16 Kernel: [28152358.208108] Abgebrochener Prozess 28416 (Redis-Server) total-vm: 7660204kB, anon-rss: 2285492kB, file-rss: 0kB

das ist es! Dieser Prozess (redis save rdb) wird vom OOM-Killer beendet

verweist:

https://github.com/antirez/redis/issues/1886

Finden, welcher Prozess von Linux OOM Killer getötet wurde

carton.swing
quelle
3

FWIW, ich bin darauf gestoßen und die Lösung bestand darin, einfach eine Swap-Datei zur Box hinzuzufügen. Ich habe diese Methode verwendet: https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04

Ryan Angilly
quelle
Wie haben Sie herausgefunden, dass der Speicherüberlauf das Problem war? Ich könnte das gleiche Problem haben.
DarthSpeedious
@DarthSpeedious Ich erinnere mich nicht. Wenn ich raten müsste, würde ich sagen, dass sich vielleicht etwas in den Protokollen darüber beschwert, dass kein Speicher zugewiesen werden kann. Entschuldigung, ich kann nicht hilfreicher sein.
Ryan Angilly
Zunächst dachte ich, dass es auch eine großartige Lösung sein wird, mit Swap und Redis zusammen zu arbeiten. Dann habe ich einige Nachforschungen angestellt und bin zu diesem Artikel antirez.com/news/52 gelangt , der behauptet, es sei eine falsche Art, Redis zu verwenden, jedenfalls nicht Sind Sie zu 100% damit einverstanden? Sind Sie mit der Leistung der Verwendung von Redis mit Swap zufrieden?
Talsibony
1
@DarthSpeedious In Ihrem Redis-Protokoll wird der Fehler " Speicher kann nicht zugeordnet werden " angezeigt. Sehen Sie hier, wie man die Protokolldatei sieht: stackoverflow.com/questions/16337107/…
Bruno Peres
3

Auch ich stand vor dem gleichen Problem. Beide Antworten (die am besten bewertete und die akzeptierte) geben nur eine vorübergehende Lösung für dieselbe.

Darüber hinaus config set stop-writes-on-bgsave-error noist dies eine schreckliche Möglichkeit, diesen Fehler zu überprüfen, da diese Option verhindert, dass Redis benachrichtigt werden, dass Schreibvorgänge gestoppt wurden, und fortfahren kann, ohne die Daten in einen Snapshot zu schreiben. Dies ignoriert diesen Fehler einfach. Verweisen Sie darauf

Wie für die Einstellung dirin configin redis-cli, sobald Sie den redis - Dienst neu starten, wird dies zu klären erhalten und der gleiche Fehler wird wieder auftauchen. Der Standardwert von dirin redis.confist ./, und wenn Sie redis als Root-Benutzer starten, ./wird angegeben, /für welche Schreibberechtigungen keine Berechtigungen erteilt werden, und daher der Fehler.

Der beste Weg ist, den dirParameter in der Datei redis.conf festzulegen und die richtigen Berechtigungen für dieses Verzeichnis festzulegen. Die meisten Debian-Distributionen sollen es haben/etc/redis/redis.conf

Mayank Sharma
quelle
3

Heutzutage sind die Redis-Schreibzugriffsprobleme, die diese Fehlermeldung an den Client weitergeben, in den offiziellen redisDocker-Containern erneut aufgetreten.

Redis aus dem offiziellen redisImage versucht, die .rdb-Datei in den Container- /dataOrdner zu schreiben , was ziemlich unglücklich ist, da es sich um einen Ordner im Stammverzeichnis handelt und es sich auch um einen nicht persistenten Speicherort handelt (dort geschriebene Daten verschwinden, wenn Ihr Container / Pod stürzt ab).

Wenn Sie Ihren redisContainer nach einer Stunde Inaktivität als Nicht-Root-Benutzer ausgeführt haben (z. B. docker run -u 1007nicht als Standardbenutzer docker run -u 0), wird in Ihrem Serverprotokoll eine sehr detaillierte Fehlermeldung angezeigt (siehe docker logs redis):

1:M 29 Jun 2019 21:11:22.014 * 1 changes in 3600 seconds. Saving...
1:M 29 Jun 2019 21:11:22.015 * Background saving started by pid 499
499:C 29 Jun 2019 21:11:22.015 # Failed opening the RDB file dump.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Jun 2019 21:11:22.115 # Background saving error

Sie müssen also den Containerordner /dataeinem externen Speicherort zuordnen (wo der Nicht-Root-Benutzer, hier: 1007, Schreibzugriff hat, z. B. /tmpauf dem Host-Computer), z.

docker run --rm -d --name redis -p 6379:6379 -u 1007 -v /tmp:/data redis

Es ist also eine Fehlkonfiguration des offiziellen Docker-Images (das /tmpnicht geschrieben werden sollte /data), die diese "Zeitbombe" erzeugt, die Sie höchstwahrscheinlich nur in der Produktion antreffen werden ... über Nacht an einem besonders ruhigen Feiertagswochenende: /

mirekphd
quelle
1
Ich wollte hier nur einen Kommentar hinzufügen, da dies letztendlich dazu beitrug, Probleme zu lösen, mit denen ich bei Redis in Docker konfrontiert war. Unsere UAT- und Dev Docker-Server sind Windows. Windows Defender identifiziert RDB-Dateien als potenzielle Viren. Durch das Mounten Ihres / data-Verzeichnisses wird das übergeordnete Problem vorübergehend behoben. bis Windows Defender die Datei unter Quarantäne stellt und eine andere verursacht. Stellen Sie sicher, dass Sie das bereitgestellte Datenverzeichnis als Ausnahme in Windows Defender hinzufügen, um dies zu beheben.
TrevorB
1
Erinnert mich daran, dass die Windows Defender-Warnung nicht unbedingt falsch positiv sein muss - ein Cryptominer kann das offizielle Redis-Image infizieren, selbst wenn es ohne Root ausgeführt wird und alle Funktionen verloren gehen - es reicht aus, seinen Port dem Netz auszusetzen
mirekphd
Danke, das ist ein guter Punkt. Nur neugierig, aber wie würde eine RDB-Datei auf dem Host ausgeführt, insbesondere eine Windows-Datei? Ich nehme an, es könnte innerhalb des Containers selbst ausgeführt werden. Aber das ist nicht spezifisch für diesen speziellen Container.
TrevorB
1
Richtig, die Nutzdaten würden wahrscheinlich nicht unter Windows ausgeführt werden können, es sei denn, sie sind vollständig in Lua geschrieben und somit so plattformübergreifend wie Redis selbst ... Der Befehl eval ist eine Erfindung des Teufels, unabhängig von der Sprache
mirekphd
Dies war eine aufschlussreiche Erfahrung; vielen Dank. Anscheinend haben unsere UAT / DEV-Erstellungsdateien Ports außerhalb des Docker-Netzwerks verfügbar gemacht. Ich weiß nicht, wie das möglich ist, aber diese Instanzen erhielten Admin-Befehle und tatsächlich. starteten einen Crypto Miner. Ich habe diese Ports deaktiviert, den lokalen RDB-Mount deaktiviert und die Windows Defender-Ausnahme erneut installiert (dies spielt jedoch bei ausgeschaltetem Mount keine Rolle). Ich muss untersuchen, wie diese Befehle durch unsere Firewall kamen, aber ich beobachte genau
TrevorB
3

für mich

config set stop-writes-on-bgsave-error no

und ich lade meinen Mac neu, es funktioniert

wuhaiwei
quelle
1

Ich bin auf dieses Problem gestoßen, als ich auf einem Server mit AFS-Speicherplatz gearbeitet habe, weil mein Authentifizierungstoken abgelaufen war, was zu Permission DeniedAntworten führte, als der Redis-Server versuchte, zu speichern. Ich habe dies gelöst, indem ich mein Token aktualisiert habe:

kinit USERNAME_HERE -l 30d && aklog

duhaime
quelle
1

Wenn Sie Docker / Docker-Compose verwenden und verhindern möchten, dass Redis in eine Datei schreibt, können Sie eine Redis-Konfiguration erstellen und in einen Container einbinden

docker.compose.override.yml

  redis:¬
      volumes:¬
        - ./redis.conf:/usr/local/etc/redis/redis.conf¬
      ports:¬
        - 6379:6379¬

Sie können die Standardkonfiguration hier herunterladen

Stellen Sie in der Datei redis.conf sicher, dass Sie diese 3 Zeilen auskommentieren

save 900 1
save 300 10
save 60 10000

Weitere Lösungen zum Entfernen der persistenten Daten finden Sie hier

Nic Wanavit
quelle
1

In meinem Fall ist es passiert, weil ich gerade redisauf dem schnellen Weg installiert habe . Redis läuft also nicht als root. Ich konnte dieses Problem lösen, indem ich den Anweisungen im Installing Redis more properlyAbschnitt der Kurzanleitung folgte . Danach wurde das Problem behoben und redisläuft nun als root. Hör zu.

meow2x
quelle
1

Nachdem ich endlich so viele SO-Fragen durch den Kopf geschlagen hatte - für mich funktionierte die Antwort von @Axel Advento, aber mit ein paar zusätzlichen Schritten -, stand ich immer noch vor den Erlaubnisproblemen.
Ich musste den Benutzer wechseln redis, ein neues Verzeichnis in seinem Ausgangsverzeichnis erstellen und es dann als Redis-Verzeichnis festlegen.

sudo su - redis -s /bin/bash
mkdir redis_dir
redis-cli CONFIG SET dir $(realpath redis_dir)
exit # to logout from redis user (optional)
Markroxor
quelle
0

In meinem Fall bezog es sich auf den freien Speicherplatz. (Sie können es mit dem df -hBefehl bash überprüfen. ) Wenn ich Speicherplatz freigebe, ist dieser Fehler verschwunden.

Mohammad Reza Esmaeilzadeh
quelle
0

Wenn Sie Redis lokal auf einem Windows-Computer ausführen, versuchen Sie, "als Administrator auszuführen" und prüfen Sie, ob es funktioniert. Bei mir bestand das Problem darin, dass sich Redis im Ordner "Programme" befand, wodurch die Berechtigungen standardmäßig eingeschränkt werden. So wie es sollte.

Jedoch nicht automatisch Redis als Administrator ausführen Sie wollen nicht mehr Rechte gewähren , dass es haben soll. Sie wollen dies durch das Buch lösen.

Wir konnten das Problem schnell identifizieren, indem wir es als Administrator ausführten. Dies ist jedoch keine Lösung. Ein wahrscheinliches Szenario ist, dass Sie Redis in einem Ordner abgelegt haben, der keine Schreibrechte besitzt. Infolgedessen wird die DB-Datei an demselben Speicherort gespeichert.

Sie können dieses Problem lösen, indem Sie das öffnen redis.windows.confund nach der folgenden Konfiguration suchen:

    # The working directory.
    #
    # The DB will be written inside this directory, with the filename specified
    # above using the 'dbfilename' configuration directive.
    #
    # The Append Only File will also be created inside this directory.
    #
    # Note that you must specify a directory here, not a file name.
    dir ./

Wechseln Sie dir ./in einen Pfad, für den Sie regelmäßig Lese- / Schreibberechtigungen haben

Sie können den Redis-Ordner auch ganz in einen Ordner verschieben, von dem Sie wissen, dass er über die richtigen Berechtigungen verfügt.

Pascalculator
quelle
0

Für mich war es nur ein Problem der Berechtigungen für den persistenten Redis-Datenordner. Ich gab es ein:

chmod 777 -Rf data/

Und es funktioniert! Vielleicht ist es früh zu sagen, dass das Problem behoben ist. Da ich auch vermute, dass Redis nicht als Root ausgeführt wird, muss ich meine Docker-Datei überprüfen, um mehr herauszufinden.

Macherif
quelle
0

Überprüfen Sie Ihr Redis-Protokoll, bevor Sie Maßnahmen ergreifen. Einige der Lösungen in diesem Thread löschen möglicherweise Ihre Redis-Daten. Seien Sie also vorsichtig, was Sie tun.

In meinem Fall ging der Maschine der Arbeitsspeicher aus . Dies kann auch passieren, wenn auf dem Host kein freier Speicherplatz mehr vorhanden ist .

Erfun
quelle
0

Bitte beachten Sie, dass dieser Fehler auftritt, wenn Ihr Server angegriffen wird. Es wurde gerade festgestellt, dass redis nicht in '/etc/cron.d/web' schreiben kann. Nach dem Korrigieren der Berechtigungen wurde eine neue Datei hinzugefügt, die aus einem Mining-Algorithmus mit einigen Ausblendungsoptionen besteht.

Qzaki
quelle
0
# on redis 6.0.4 
# if show error 'MISCONF Redis is configured to save RDB snapshots'
# Because redis doesn't have permissions to create dump.rdb file
sudo redis/bin/redis-server 
sudo redis/bin/redis-cli
youwei Fan
quelle
-1

Wie von @Chris hervorgehoben, ist das Problem wahrscheinlich zu wenig Speicher. Wir haben damit angefangen, als wir MySQL ( innodb_buffer_pool_size) zu viel RAM zugewiesen haben .

Um sicherzustellen, dass genügend RAM für Redis und andere Dienste vorhanden ist, haben wir innodb_buffer_pool_sizeMySQL reduziert .

Mugoma J. Okomba
quelle
-1

In meinem Fall war der Grund sehr wenig freier Speicherplatz auf der Festplatte (nur 35 MB). Ich habe folgendes getan -

  1. Alle Redis-bezogenen Prozesse wurden gestoppt
  2. Löschen Sie einige Dateien auf der Festplatte, um ausreichend freien Speicherplatz zu schaffen
  3. Redis-Dump-Datei löschen (falls vorhandene Daten nicht benötigt werden)

    sudo rm /var/lib/redis/*

  4. Löschen Sie alle Schlüssel aller vorhandenen Datenbanken

    sudo redis-cli flushall

  5. Starten Sie alle Sellerie-Aufgaben neu und überprüfen Sie die entsprechenden Protokolle auf Probleme
Rajarshig
quelle
1
Sie müssen dies auf Ihrer Entwicklungsinstanz getan haben. Nicht die richtige Lösung für datenorientierte Anwendungen.
Nikesh Devaki
-1

Sie müssen den neuen Ordner chmod und chown

chown -R redis und chmod ...

Mohamed-yassine Belatar
quelle