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 все еще работал.