web-dev-qa-db-fra.com

Redis: Échec d'ouverture de .rdb pour la sauvegarde: permission refusée

J'ai un serveur Redis 2.8 installé en utilisant Ubuntu apt-get sur Ubuntu 12.04.

J'ai copié un fichier dump.rdb d'une autre base de données. Maintenant, lorsque j'essaie de démarrer le nouveau serveur, je reçois constamment:

[35763] 04 Mar 01:51:47.088 * 1 changes in 900 seconds. Saving...
[35763] 04 Mar 01:51:47.088 * Background saving started by pid 43313
[43313] 04 Mar 01:51:47.088 # Failed opening .rdb for saving: Permission denied

Comment puis-je résoudre ça?

30
Niels Kristian

Vous devriez vérifier votre fichier redis.conf pour voir les permissions dans dir et dbfilename. Si le fichier nommé dans le nom de fichier db qui se trouve dans le chemin spécifié dans le chemin dir existe et que l'autorisation est également valable. alors le problème devrait être résolu. 

J'espère que cela aidera quelqu'un.

P.S.

Pour trouver l'emplacement du fichier redis.conf, vous pouvez utiliser le #ps ax | grep redis pour vérifier. Habituellement, il sera transmis au redis-server en tant que fichier d'entrée.

Pour les permissions dir: ce devrait être 755, pour le dbfilename, ce devrait être 644

Parfois, vous devez également utiliser la commande top pour vérifier si le user:group du redis-server et le propriétaire de dir sont cohérents. c'est-à-dire que le redis-server est exécuté par redis: redis, mais le dir est sous root: root. Dans ce cas, vous devez chown redis:redis -R dir.

27
chancyWu

Ce qui précède n'a pas fonctionné pour moi. J'ai constaté que tout le monde était si préoccupé par BGSAVE. Mais tant que vous n'êtes pas en production, SAVE vous donne une réponse plus simple: ERR. BGSAVE ne le fait pas, sauf si vous inspectez les journaux.

Après avoir creusé des dizaines de messages, je n’ai trouvé aucun indice. La seule chose qui a été corrigée a été l’arrêt du service Redis et son exécution manuelle.

Au début, je pensais que cela pouvait être lié à l'utilisateur pour le compte de Redis. Pas du tout: la différence réelle était le foutu systemd sous-système qui, à un moment donné dans le fichier du service de redis config (/etc/systemd/system/redis.service), présentait les caractéristiques suivantes:

ReadWriteDirectories: -/etc/redis

WoW super cool! En fin de compte, cela empêchait Redis d'accéder à tout emplacement du système, même si les autorisations le permettaient parfaitement. 

Comme il est naïf de ma part de penser que l’autorisation suffit à nous assurer que quelque chose a les droits voulus… (oui, je suis ironique).

2
Riccardo Manfrin

Mon problème de permission semblait résulter de l'incapacité de l'utilisateur Redis à modifier le dossier parent (/ var/lib/redis/6379) afin de créer un fichier temporaire.

Cela a été vu dans un strace du processus redis-server:

open("temp-1833.rdb", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 EACCES (Permission denied)

Le problème a été résolu après l'exécution de la commande suivante:

setfacl -m d:u:redis:rwX,u:redis:rwX /var/lib/redis/6379
2
Paul Calabro

Pour Windows uniquement: Cela signifie que l'utilisateur n'a pas l'autorisation pour cela . PAR propriétaire par défaut de ce fichier est NETWORK SERVICE, qui dispose d'un accès très limité et doit être modifié (selon la documentation).

solution :

  1. allez dans votre dossier Redis.

  2. clic droit -> aller aux propriétés -> onglet sécurité.

  3. cliquez sur avancé.

  4. cliquez sur Ajouter pour ajouter votre utilisateur.

  5. cliquez sur sélectionnez un principal.

  6. entrez votre utilisateur (par exemple, GLOBAL\xxx).

  7. cliquez sur les noms de chèques et cliquez sur ok

  8. donner des autorisations à cet utilisateur.

  9. changez enfin le propriétaire pour cet utilisateur.

1
Sansan

Dans mon cas, tous les droits étaient corrects (je veux dire que la réponse la plus regardée ne m'aide pas). MAIS! Redis a utilisé un chemin incorrect pour le fichier. Dans la config, c’était correct, mais de Rails-cli, il renvoyait '/proc'.Cette réponse m'a aidé - https://serverfault.com/questions/800295/redis-spontaneous-failed-failed-opening- rdb-for-saving-permission-denied

Attention

Pour une question exacte, cela n'a pas d'importance, mais ma situation ressemblait à un serveur {quelqu'un a piraté}. Lien vers l'explication . Alors, vérifiez votre configuration correctement.

Vérifiez la configuration 'nom_fichier_base' dans votre fichier redis.conf. Votre processus en cours d'exécution n'a pas d'autorisation d'écriture dans le chemin.

1
yinqiwen

Mon fichier /lib/system/systemd/redis-server.service contient les éléments suivants:

ReadOnlyDirectories=/
ReadWriteDirectories=-/var/lib/redis

Mon fichier /etc/redis/redis.conf indiquait que la base de données devait se trouver dans/data/redis

dir /data/redis

Le fichier de configuration systemd ci-dessus effectivement make/data/redis est en lecture seule. 

Une fois que j'ai changé le fichier redis.conf pour lire:

dir /var/lib/redis

J'ai arrêté de recevoir l'erreur.

1
Tim Stewart

J'ai eu le même problème avec Redis utilisé par Sidekiq dans l'application Rails, rm -rf ./tmp/ a fonctionné comme un charme.

0
medik

supervised systemd est uniquement destiné à Type=notify et daemonize yes correspond à Type=forking.

Sudo vim /etc/systemd/system/redis.service

Lorsque vous voyez le fichier de service, éditez le Type=forking

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Type=forking
Group=redis
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

Ouvrez ce fichier

Sudo vim /etc/redis/redis.conf

Ajoutez ces changements

daemonize yes
supervised no
0
Rick

Si quelqu'un rencontre cela à nouveau et n'a pas de problème de mise à niveau, il suffit de mettre à niveau votre installation Redis vers la dernière version. J'ai rencontré ce problème avec Redis 2.8.15 et je suis passé à Redis 2.8.22 qui était disponible au moment de la rédaction de cet article. Un administrateur système de mon entreprise m'a assuré qu'il s'agissait d'un bogue avec Redis 2.8.15 et que le problème avait disparu après la mise à niveau.

0
OmarOthman

Le fichier lock du répertoire des journaux est ce qui a causé cette erreur pour moi. J'ai pu effacer l'erreur en supprimant le fichier de verrouillage:

rm /var/log/redis/lock.

Cela s'est produit lorsqu'un autre système a été restauré sur celui-ci alors que redis était toujours en cours d'exécution.

0
Rakaim

J'ai passé un certain temps là-dessus jusqu'à ce que je réalise que ma session en ligne cmd fonctionnait dans le mauvais lecteur: /. Juste au cas où cela pourrait aider quelqu'un d'autre!

0
jbk