MISCONF Redis est configuré pour enregistrer les RDB instantanés
Pendant l'écriture de Redis ( SET foo bar
) j'obtiens l'erreur suivante:
MISCONF Redis est configuré pour enregistrer les RDB instantanés, mais il est actuellement
pas capable de persister sur le disque. Les commandes qui peuvent modifier le jeu de données sont
désactivée. Veuillez vérifier Redis journaux pour plus de détails sur l'erreur.
Fondamentalement, je comprends que le problème est que le redis n'est pas en mesure d'enregistrer les données sur le disque, mais n'ont aucune idée de comment se débarrasser du problème.
Aussi la question suivante a le même problème, il est abandonné depuis longtemps sans réponses et probablement pas de tentatives pour résoudre le problème.
- avez-vous été en mesure de résoudre ce problème. Si oui , pourriez-vous s'il vous plaît aider avec les étapes. Parce que de placer le fichier rdb ailleurs pas de le résoudre, je suppose. Je pense que im manque quelque chose ici
- Cette erreur se produit en raison de commencer le redis serveur dans un répertoire où redis n'a pas les autorisations. Je recommande de revenir aux paramètres par défaut après la résolution du problème: Voir répondre concernant un correctif pour ce problème.
- En plus de Govind Rai de réponse: stackoverflow.com/a/47880440/5649620
- J'ai déjà subvention redis la permission de modifier à la fois le groupe et le propriétaire de
redis
, mais cela n'aide pas!
Vous devez vous connecter pour publier un commentaire.
Dans le cas où vous rencontrez l'erreur et de certaines données ne peuvent pas être jetés sur le fonctionnement redis instance (problèmes avec les autorisations pour le
rdb
fichier ou de son répertoire de manière incorrecte, ou en cours d'exécution hors de l'espace disque), vous pouvez toujours rediriger lerdb
fichier soit écrit quelque part d'autre.À l'aide de
redis-cli
, vous pouvez faire quelque chose comme ceci:Après cela, vous pouvez exécuter une
BGSAVE
commande pour vous assurer que les données seront écrites à lardb
fichier. Assurez-vous que lorsque vous exécutezINFO
,bgsave_in_progress
est déjà0
(soit l'opération est un succès ou une erreur s'est rencontré). Après cela, vous pouvez maintenant lancer la sauvegarde de l'générérdb
fichier dans un endroit sûr.dir C:/Temp/
. Faire un bgsave pour vérifier que cela fonctionne..À l'aide de
redis-cli
, vous pouvez l'arrêter en essayant de sauver de l'instantané:C'est une solution de rechange rapide, mais si vous vous souciez de données que vous utilisez, vous devriez assurez-vous pourquoi bgsave échoué à la première place.
Il peut y avoir des erreurs lors de la bgsave processus en raison de la faible mémoire. Essayez ceci (à partir de redis enregistrement en arrière-plan FAQ)
Cette erreur se produit en raison de BGSAVE être échoué. Au cours de BGSAVE, Redis fourches d'un processus enfant pour enregistrer les données sur le disque. Bien que la raison exacte de l'échec de BGSAVE peut être vérifiée à partir de journaux (habituellement à
/var/log/redis/redis-server.log
sur les machines linux), mais beaucoup de fois BGAVE échoue parce que la fourche ne peut pas allouer de la mémoire. Plusieurs fois la fourche ne parvient pas à allouer la mémoire (bien que la machine a assez de RAM) en raison d'un conflit d'optimisation par l'OS.Comme on peut le lire à partir de Redis FAQ:
Redis n'a pas besoin d'autant de mémoire que le système d'exploitation pense qu'il n'en faut pour l'écrire sur le disque, donc peut de manière préventive échec de la fourche.
Pour Résoudre ce problème, vous pouvez:
Modifier
/etc/sysctl.conf
et d'ajouter:Puis redémarrez sysctl avec:
Sur FreeBSD:
Sur Linux:
systemctl status redis
a révélé qu'il y a un avertissement qui a suggéré exactement la modification de laovercommit_memory=0
réglage. La modification de ce en effet résolu le problème pour moi.dans le cas où vous travaillez sur une machine linux, aussi vérifiez les autorisations de fichiers et dossiers de la base de données.
La db et le chemin d'accès à elle peut être obtenue par:
dans
redis-cli
:et dans la ligne de commande
ls -l
. Les autorisations pour le répertoire doit être 755, et ceux pour le fichier doit être 644. Aussi, normalement redis-server s'exécute en tant qu'utilisateurredis
, donc il est aussi agréable de donner à l'utilisateurredis
le propriétaire du dossier par l'exécution desudo chown -R redis:redis /path/to/rdb/folder
. Cela a été élaborée dans la réponse ici.Merci à tous pour vérifier le problème, apparemment, l'erreur s'est produite lors de
bgsave
.Pour moi, en tapant
config set stop-writes-on-bgsave-error no
dans un shell et le redémarrage Redis résolu le problème.Commencer Redis Serveur dans un répertoire où Redis a des droits d'écriture
Les réponses ci-dessus va certainement résoudre votre problème, mais voici ce qui se passe réellement:
L'emplacement par défaut pour stocker les
rdb.dump
fichier est./
(désignant le répertoire courant). Vous pouvez le vérifier dans votreredis.conf
fichier. Par conséquent, le répertoire d'où vous commencez le redis serveur où undump.rdb
fichier sera créé et mis à jour.Il semble que vous avez commencé à courir le redis serveur dans un répertoire où redis n'a pas les autorisations appropriées pour créer les
dump.rdb
fichier.Pour aggraver les choses, redis sera probablement pas vous permettre d'arrêter le serveur, soit jusqu'à ce qu'il est capable de créer le fichier rdb pour garantir le bon enregistrement des données.
Pour résoudre ce problème, vous devez aller dans le redis environnement client à l'aide de
redis-cli
et mise à jour de ladir
clé et définissez sa valeur sur le dossier de votre projet ou dans un dossier où le non-root dispose des autorisations nécessaires pour enregistrer. Ensuite, exécutezBGSAVE
d'invoquer la création de ladump.rdb
fichier.(Maintenant, si vous besoin pour enregistrer l'image.rdb fichier dans le répertoire que vous avez démarré le serveur, vous devez modifier les autorisations pour le répertoire de sorte que le redis peut écrire. Vous pouvez rechercher stackoverflow pour savoir comment faire).
Vous devriez maintenant être en mesure d'arrêter le redis serveur. Notez que nous avons codé en dur le chemin. Coder en dur est rarement une bonne pratique et je le recommande fortement de commencer le redis serveur à partir de votre répertoire de projet et la modification de la
dir key back to
./`.De cette façon quand vous avez besoin le redis pour un autre projet, le fichier sera créé dans votre répertoire du projet et de ne pas codé en dur dans le chemin d'accès du répertoire de projet.
redis
donc je ne:sudo chown redis:redis /var/lib/redis
Avait rencontré cette erreur et a été en mesure de déterminer à partir de journal que l'erreur est en raison de l'espace disque n'être pas assez. Toutes les données qui a été inséré dans mon cas n'était pas nécessaire, pas plus. J'ai donc essayé de FLUSHALL. Depuis redis-rdb-bgsave processus était en cours d'exécution, il n'a pas été permettant de vider les données aussi. J'ai suivi les étapes ci-dessous et a été en mesure de continuer.
Le processus redis-rdb-bgsave n'était plus à courir après les étapes ci-dessus.
Un plus solution permanente pourrait être de regarder dans /etc/redis/redis.conf autour de lignes 200-250 il y a des paramètres pour le rdb des fonctionnalités qui n'ont pas été une partie de redis retour dans le 2.les x jours.
notamment
peut être modifié à
ou vous pouvez commenter tous les sauver lignes, et ne pas s'inquiéter de la persistance. (Voir les commentaires dans /etc/redis/redis.conf)
Aussi, n'oubliez pas
toutes ces réponses n'expliquent pas la raison pour laquelle le rdb enregistrer échoué.
comme mon cas, j'ai vérifié le redis journal et trouve:
exécutez la commande suivante dans le terminal:
afficher:
c'est elle! ce processus(redis enregistrer rdb) est tué par OOM killer
se réfère:
https://github.com/antirez/redis/issues/1886
Trouver le processus qui a été tué par Linux OOM killer
FWIW, je suis tombé sur cette et la solution était tout simplement ajouter un fichier d'échange de la boîte. J'ai utilisé cette méthode: https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04
J'ai été confrontée au même problème, la principale raison derrière cela est la mémoire vive(RAM) de la consommation par le redis.
Mon EC2 machine a 8GO de RAM(arounf 7.4 disponible pour la consommation)
Lorsque mon programme était en cours d'exécution, l'utilisation de la RAM est allé jusqu'à 7.2 GO laissant à peine ~100 MO en RAM , ce qui est généralement le déclenche la
MISCONF Redis error ...
Vous pouvez déterminer la consommation de RAM à l'aide de la
htop
de commande. Recherchez les Mem attribut après exécution de la commande htop. Si elle montre une forte consommation (comme dans mon cas, c'était de 7,2 GO/7,4 GO), Il est préférable de mettre à niveau l'instance avec plus de Mémoire.Dans ce scénario à l'aide de
config set stop-writes-on-bgsave-error no
va être une catastrophe pour le serveur et peut perturber les autres services s'exécutant sur le serveur(le cas échéant). Donc, il vaut mieux éviter la commande config et MISE à niveau de VOTRE REDIS MACHINE.Pour info: Vous devrez peut-être installer htop pour faire ce travail :
sudo apt-get install htop
La solution à ce qui peut être une autre RAM heavy service en cours d'exécution sur votre système, vérifier pour d'autres services en cours d'exécution sur votre serveur/machine/de l'instance et de l'arrêter si ce n'est pas nécessaire. De vérifier tous les services en cours d'exécution sur votre machine, utilisez
service --status-all
Et une suggestion pour les personnes directement coller la commande config , s'il vous plaît ne recherche un peu et au moins avertir l'utilisateur avant d'utiliser ces commandes. Et comme @Rodrigo a mentionné dans son commentaire : "Il n'a pas l'air cool à ignorer les erreurs."
Moi aussi j'ai été confrontée au même problème. Les deux réponses (les plus upvoted l'un et l'acceptés) juste donner une solution temporaire pour la même chose.
En outre, la
config set stop-writes-on-bgsave-error no
est une manière horrible à regarder cette erreur, étant donné que cette option n'est arrêter redis depuis la notification que les écritures ont été arrêtés et d'avancer sans écrire les données dans un instantané. C'est tout simplement ignorer cette erreur.Reportez-vous à cette
Que pour la création d'
dir
dansconfig
dans redis-cli, une fois que vous redémarrez le redis service, ce doit obtenir effacée trop et le même message d'erreur s'affiche encore. La valeur par défaut dedir
dansredis.conf
est./
, et si vous commencez redis tant qu'utilisateur root, puis./
est/
à qui écrire autorisations ne sont pas accordées, et d'où l'erreur.La meilleure façon est de définir la
dir
paramètre dans le redis.fichier conf et définir des autorisations pour le répertoire. La plupart des distributions debian doit avoir dans/etc/redis/redis.conf
Aujourd'hui le Redis accès en écriture problèmes qui donnent ce message d'erreur au client est réapparue dans l'officiel
redis
conteneurs docker.Redis des l'officiel
redis
de l'image essaie d'écrire le .rdb fichier dans les conteneurs/data
dossier, ce qui est plutôt dommage, car c'est une racine appartenant dossier et c'est un non-persistant emplacement de trop (les données écrites il y aura disparaître si votre conteneur/ipod se bloque).Donc, après une heure d'inactivité, si vous avez exécuté votre
redis
conteneur en tant qu'utilisateur non-root (par exempledocker run -u 1007
plutôt que par défautdocker run -u 0
), vous obtiendrez un bien détaillée de l'erreur msg dans votre serveur journal (voirdocker logs redis
):Donc ce que vous devez faire est de dresser la carte du conteneur
/data
dossier vers un emplacement externe (où l'utilisateur non-root, ici: 1007, a accès en écriture, comme/tmp
sur la machine hôte), l'e.g:Donc c'est une mauvaise configuration de l'officiel docker image (qui doit écrire à
/tmp
pas/data
) qui produit cette "bombe à retardement" que vous serez plus susceptibles de rencontrer seulement dans la production... la nuit sur certains particulièrement silencieux week-end de vacances :/J'ai frappé ce problème tout en travaillant sur un serveur avec AFS espace disque, car mon jeton d'authentification avait expiré, ce qui a abouti à
Permission Denied
des réponses quand vous le redis-server essayé de sauver. J'ai résolu ce problème en rechargeant mon jeton:kinit USERNAME_HERE -l 30d && aklog
Comme l'a souligné @Chris le problème de manque de mémoire. Nous avons commencé l'expérience lorsque nous avons alloué trop de RAM pour MySQL (
innodb_buffer_pool_size
).Pour s'assurer il y a assez de RAM pour le Redis et d'autres services, nous avons réduit
innodb_buffer_pool_size
sur MySQL.Dans mon cas, la raison est très faible espace libre dans le disque (seulement 35 Mo). Je n'ai la suite -
Supprimer redis fichier de vidage (si les données existantes ne sont pas nécessaires)
sudo rm /var/lib/redis/*
Supprimer toutes les clés de toutes les bases de données existantes
sudo redis-cli flushall
Si vous exécutez Redis localement sur une machine windows, essayez d' "exécuter en tant qu'administrateur" et voir si cela fonctionne. Avec moi, le problème est que le Redis était situé dans le dossier "Program Files", qui limite les autorisations par défaut. Comme il se doit.
Cependant, ne s'exécute pas automatiquement Redis en tant qu'administrateur Vous ne voulez pas accorder plus de droits qu'il est censé avoir. Voulez-vous résoudre ce par le livre.
Donc, nous avons été en mesure d'identifier rapidement le problème en exécutant en tant qu'administrateur, mais ce n'est pas le remède. Un scénario probable est que vous avez mis Redis dans un dossier qui n'a pas les droits en écriture et en conséquence le fichier de base de données est stockée dans le même emplacement.
Vous pouvez résoudre ce problème en ouvrant le
redis.windows.conf
et de recherche pour la configuration suivante:# 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 ./
Changement
dir ./
d'un chemin, vous avez régulièrement des autorisations de lecture/écriture pourVous pourriez tout aussi bien déplacer le Redis dossier dans son intégralité dans un dossier que vous connaissez a le droit d'autorisations.
Dans le cas où vous utilisez panneau/panneau-composer et que vous souhaitez empêcher redis à partir de l'écriture dans le fichier, vous pouvez créer un redis config et le monter dans un récipient
docker.composer de la musique.override.yml
Vous pouvez télécharger la configuration par défaut de ici
dans le redis.fichier conf assurez-vous de commenter ces 3 lignes
myou peut afficher plus de solutions pour supprimer les données persistantes ici
vous devez chmod et chown le nouveau dossier
chown -R redis
et chmod ...
Solution de @Govind de la Rai " pour enregistrer l'image.rdb fichier dans le répertoire que vous avez démarré le serveur en:
Cliquez-droit sur votre Redis dossier, cliquez sur Propriétés, puis cliquez sur l'onglet Sécurité.
Cliquez sur Modifier pour ouvrir la boîte de dialogue Autorisations pour.
Cliquez sur le TOUS les PACKAGES d'APPLICATION
Dans la zone Autorisations pour, sélectionnez la case à cocher Autoriser le 'contrôle total'.