Redis: Ошибка открытия .rdb для сохранения: разрешение отклонено

У меня есть сервер redis 2.8, установленный с помощью ubuntu apt-get на ubuntu 12.04.

Я скопировал dump.rdb из другой базы данных. Теперь, когда я пытаюсь запустить новый сервер, я постоянно получаю:

[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

Как я могу это решить?

Ответ 1

Вы должны проверить свой файл redis.conf, чтобы просмотреть разрешения в dir и dbfilename. Если файл, названный в dbfilename, который находится в пути, указанном в пути dir, существует, и разрешение также является правильным. то проблема должна быть исправлена.

Надеюсь, это поможет кому-то.

P.S.

Чтобы найти расположение файла redis.conf, вы можете использовать #ps ax | grep redis для проверки. Обычно он будет передаваться в redis-server в качестве входного файла.

Для разрешений dir: для dbfilename это должно быть 755, оно должно быть 644

Иногда вам также нужно использовать команду top, чтобы проверить, соответствуют ли user:group redis-server и владелец dir. т.е. redis-server работает с помощью redis: redis, но dir находится под root: root. В этом случае вам нужно chown redis:redis -R dir.

Ответ 2

Моя проблема с разрешением, по-видимому, была результатом того, что пользователь Redis не смог изменить родительскую папку (/var/lib/redis/6379) для создания временного файла.

Это было показано в strace процесса redis-server:

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

Проблема была решена после запуска следующей команды:

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

Ответ 3

Ничто из вышеперечисленного не сработало для меня... Я видел, что все вокруг были так обеспокоены BGSAVE... но пока вы не работаете, SAVE дает вам более прямой ответ: ERR. BGSAVE не делает, если вы не проверяете журналы.

Закопав десятки постов, я не нашел никакой подсказки. Единственное, что исправило, - это остановка службы Redis и запуск ее вручную.

Сначала я подумал, что это может быть связано с тем, что пользователь от имени redis работает. Вовсе нет: фактической разницей была чертова подсистема systemd, которая в какой-то момент в файле службы конфигурации redis (/etc/systemd/system/redis.service) имела следующее:

ReadWriteDirectories: -/etc/redis

WoW супер круто! в конечном итоге это препятствовало тому, чтобы redis вообще получал доступ к чему-либо в системе, хотя разрешения позволили бы это полностью.

Как наивно с моей стороны думать, что разрешения было достаточно, чтобы гарантировать, что у кого-то есть надлежащие права... (да, я ироничен).

Ответ 4

Проверьте конфигурацию 'dbfilename' в redis.conf. В вашем запущенном процессе redis нет пути на запись в пути.

Ответ 5

Только для окон: Это означает, что у пользователя нет разрешения на это. По умолчанию владельцем этого файла является NETWORK SERVICE, который имеет очень ограниченный доступ и нуждается в изменении (согласно документации)

решение:

  • перейдите в папку ur redis.

  • щелкните правой кнопкой мыши → перейти к свойствам → вкладка безопасности.

  • нажмите на расширенный.

  • нажмите "Добавить", чтобы добавить пользователя пользователя.

  • нажмите кнопку выбора участника.

  • введите пользователя ur (например, GLOBAL\xxx).

  • нажмите "Проверить имена" и нажмите "ОК"

  • предоставить разрешения этому пользователю.

  • окончательно измените владельца на этого пользователя.

Ответ 6

В моем случае все права были правильными (я имею в виду, что самый пристальный ответ мне не помогает). НО! Redis использовал неверный путь к файлу. В конфиге это было правильно, но из rails-cli он вернул '/proc'. Этот ответ помог мне - https://serverfault.com/questions/800295/redis-spontaneously-failed-failed-opening-rdb-for-saving-permission-denied

Предупреждение

Для точного вопроса это не имеет значения, но моя ситуация выглядела как взломанный сервер. Ссылка на объяснение. Так что проверьте правильность настроек.

Ответ 7

Мой файл /lib/system/systemd/redis-server.service содержал следующее:

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

В моем файле /etc/redis/redis.conf указано, что база данных должна находиться в /data/redis

dir /data/redis

Systemd конфигурационный файл выше, эффективно делает/данные /Redis только для чтения.

Однажды я изменил файл redis.conf, чтобы прочитать:

dir /var/lib/redis

Я перестал получать ошибку.

Ответ 8

Если кто-то снова встретится с этим и не имеет проблемы с обновлением, просто обновите установку Redis до последней версии. Я столкнулся с этой проблемой с Redis 2.8.15 и обновился до Redis 2.8.22, который был доступен на момент написания этой статьи. Сисадмин в моей компании заверил меня, что это ошибка с Redis 2.8.15, и проблема просто исчезла после обновления.

Ответ 9

У меня была та же проблема с redis, которая использовалась приложением Sidekiq в Rails, rm -rf ./tmp/ работал как прелесть.

Ответ 10

Я потратил некоторое время на это, пока не понял, что мой сеанс линии cmd работает на неправильном диске:/. На всякий случай это может помочь кому-то еще!

Ответ 11

Файл блокировки в каталоге журнала - вот что вызывало у меня эту ошибку. Мне удалось очистить ошибку, удалив файл блокировки:

rm/var/log/redis/lock.

Это произошло, когда другая система была восстановлена, пока Redis все еще работал.