MISCONF Redis는 RDB 스냅 샷을 저장하도록 구성되어 있습니다


366

Redis ( SET foo bar)에 쓰는 동안 다음 오류가 발생합니다.

MISCONF Redis는 RDB 스냅 샷을 저장하도록 구성되었지만 현재 디스크에서 지속될 수 없습니다. 데이터 세트를 수정할 수있는 명령이 비활성화되었습니다. 오류에 대한 자세한 내용은 Redis 로그를 확인하십시오.

기본적으로 문제는 redis가 디스크에 데이터를 저장할 수 없지만 문제를 제거하는 방법을 모른다는 것입니다.

또한 다음 질문 에도 같은 문제가 있습니다. 오래 전 버려진 대답은 없으며 아마도 문제를 해결하려는 시도는 없었습니다.


이 문제를 해결할 수있었습니다. 그렇다면 단계를 도와 주실 수 있습니까? rdb 파일을 다른 곳에두면 해결되지 않을 것입니다. 나는 여기에 뭔가를 놓치고 있다고 생각합니다
ankur

4
이 오류는 redis에 권한이없는 디렉토리에서 redis 서버를 시작하기 때문에 발생합니다. 문제를 해결 한 후 기본 설정으로 되 돌리는 것이 좋습니다 .이 문제에 대한 해결 방법 은 답변을 참조하십시오 .
Govind Rai


@GovindRai 나는 이미 그룹과 소유자를로 변경하여 redis 권한을 부여 redis했지만 도움이되지 않습니다!
wdetac

답변:


184

오류가 발생하여 실행중인 redis 인스턴스에서 일부 중요한 데이터를 버릴 수없는 경우 ( rdb파일 또는 해당 디렉토리에 대한 권한이 잘못되었거나 디스크 공간이 부족한 경우) rdb파일을 다른 곳에 쓸 수 있도록 항상 경로 재 지정할 수 있습니다 .

를 사용하면 redis-cli다음과 같이 할 수 있습니다.

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

그런 다음, BGSAVE데이터가 rdb파일에 기록되도록 명령 을 실행할 수 있습니다 . 당신이 실행할 때 있는지 확인합니다 INFO persistence, bgsave_in_progress이미 0rdb_last_bgsave_status있다 ok. 그런 다음 생성 된 rdb파일을 안전한 위치에 백업 할 수 있습니다.


7
지속성에서 rdb_bgsave_in_progress : 0
thanikkal

어떤 이유로 config set 명령을 시도하면 영원히로드되는 것과 같습니다.
Bashar Abdullah

5
불행히도 Windows에 있고 현재 나와 MSOpenTech 버전을 사용하는 사람들은 다음과 같은 스타일로 디렉토리 경로를 설정해야합니다 dir C:/Temp/. bgsave를 수행하여 작동하는지 확인하십시오.
John P

@ 존 P, 그게 필요한 일이었습니다. 감사합니다!
Sam

2
127.0.0.1:6379> 구성 설정 디렉토리 / root / tool (오류) 오류 디렉토리 변경 : 권한 거부
Gank

316

를 사용 redis-cli하면 스냅 샷 저장 시도를 중지 할 수 있습니다.

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

이는 빠른 해결 방법이지만, 사용중인 데이터에 관심이있는 경우 bgsave가 왜 실패했는지 확인해야합니다.


21
이것은 빠른 해결 방법이지만 bgsave가 왜 실패했는지 확인해야합니다.
Mandeep Singh

7
캐싱 및 세션에 주로 redis를 사용하는 경우 필수입니다.
Jim

1
위험하지 않습니까? 예를 들어, NodeBB는 Redis를 데이터 저장소로 사용합니다.
codecowboy

2
@LoveToCode 설정 set stop-writes-on-bgsave-error yes
Phil

4
서버를 다시 시작할 때마다 동일한 문제가 다시 발생합니다. 그런 다음 다시 설정해야합니다. 영구적으로 만들려면 어떻게해야합니까?
Zia Qamar

63

메모리 부족으로 인해 bgsave 프로세스 중에 오류가 발생할 수 있습니다. 이것을 시도하십시오 (redis background에서 FAQ 저장)

echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

5
링크 : redis.io/topics/faq의 이 검색 : " 배경 절약 내가 무료로 RAM을 많이했습니다 경우에도 리눅스에서 포크 () 오류로 실패! "
브루노 페레스

49

이 오류는 BGSAVE 실패로 인해 발생합니다. BGSAVE 동안 Redis는 하위 프로세스를 분기하여 디스크에 데이터를 저장합니다. BGSAVE 실패의 정확한 이유는 로그 (일반적 /var/log/redis/redis-server.log으로 Linux 시스템에서) 에서 확인할 수 있지만 포크가 메모리를 할당 할 수 없기 때문에 BGAVE가 실패하는 경우가 많습니다. OS의 최적화 충돌로 인해 포크가 메모리를 할당하지 못하는 경우가 많습니다 (머신에 충분한 RAM이 있어도).

Redis FAQ 에서 읽을 수 있듯이 :

Redis 백그라운드 저장 스키마는 최신 운영 체제에서 포크의 COW (Copy-On-Write) 시맨틱을 사용합니다. 부모의 정확한 사본 인 Redis 포크 (자식 프로세스 작성). 자식 프로세스는 디스크의 DB를 덤프하고 마지막으로 종료합니다. 이론적으로 자식은 부모가 복사하는 것만 큼 많은 메모리를 사용해야하지만 실제로 대부분의 최신 운영 체제에서 구현되는 COW (Copy-On-Write) 시맨틱 덕분에 부모와 자식 프로세스는 공통 메모리 페이지를 공유합니다. 페이지는 자식 또는 부모에서 변경 될 때만 복제됩니다. 이론적으로 자식 프로세스가 저장되는 동안 모든 페이지가 변경 될 수 있으므로 Linux는 자식이 얼마나 많은 메모리를 사용할지 미리 알 수 없으므로 overcommit_memory 설정을 0으로 설정하면 여유 RAM이 많지 않으면 실패합니다. 모든 부모 메모리 페이지를 실제로 복제해야합니다.

overcommit_memory를 1로 설정하면 Linux가 포크를 편하게하고보다 낙관적 인 할당 방식으로 포크를 수행한다고하는데 이는 실제로 Redis가 원하는 것입니다.

Redis는 OS가 디스크에 쓰려고 생각하는 것만 큼 많은 메모리를 필요로하지 않으므로 포크에 미리 실패 할 수 있습니다.

이를 해결하기 위해 다음을 수행 할 수 있습니다.

수정 /etc/sysctl.conf및 추가 :

vm.overcommit_memory=1

그런 다음 다음을 사용하여 sysctl을 다시 시작하십시오.

FreeBSD에서 :

sudo /etc/rc.d/sysctl reload

Linux에서 :

sudo sysctl -p /etc/sysctl.conf

의 출력은 systemctl status redis정확히 변경 제안했다 경고가 있음을 밝혀 overcommit_memory=0설정을. 그것을 변경하면 실제로 문제가 해결되었습니다.
Abstract Algorithm

이렇게하면 문제가 올바르게 해결되었고 받아 들여 져야합니다.
DSynergy

tldr은 기본 설정으로 redis가 10GB 램을 사용하는 경우이 하위 프로세스를 실행할 수 있도록 10GB의 램을 확보해야합니까?
Dan Hastings

@ DanHastings-예. overcommit_memory를 1로 설정하면이 요구 사항이 완화됩니다.
Bhindi

26

redis 서버를 다시 시작하십시오.

  • macOS (brew) : brew services restart redis.
  • 리눅스 : sudo service redis restart /sudo systemctl restart redis
  • Windows : Windows + R-> 유형 services.msc, Enter-> 검색을 Redis클릭 한 다음을 클릭하십시오 restart.

Brew ( brew upgrade)로 redis를 업그레이드 한 후 개인적 으로이 문제가 발생했습니다 . 랩톱을 재부팅 한 후 즉시 작동했습니다.


사람이이 글을 읽는 경우 나 업그레이드를 할 잘하지만 아무것도로 브루의 문제가 있었다 : 난 그냥 함께 서비스를 시작하는 데 필요한 sudo: brew services stop redis; sudo brew services start redis.
bfontaine

24

Linux 시스템에서 작업중인 경우 데이터베이스의 파일 및 폴더 권한도 다시 확인하십시오.

db와 그 경로는 다음을 통해 얻을 수 있습니다.

에서 redis-cli:

구성 디렉토리

구성하기 dbfilename

그리고 커맨드 라인에서 ls -l. 디렉토리에 대한 권한은 755 여야하고 파일에 대한 권한은 644 여야합니다 . 또한 일반적으로 redis-server는 사용자로 실행되므로을 실행하여 사용자 redis에게 redis폴더의 소유권 을 부여하는 것도 좋습니다 sudo chown -R redis:redis /path/to/rdb/folder. 이것에 대한 답은 여기 에 자세히 설명되어 있습니다 .


어떤 권한이 있어야합니까?
stephen

이것은 나를 위해 일했습니다. 감사!
Lordwhizy

19

문제를 확인해 주셔서 감사합니다. 분명히 오류가 발생했습니다 bgsave.

나를 config set stop-writes-on-bgsave-error no위해 쉘을 입력 하고 Redis를 다시 시작하면 문제가 해결되었습니다.


82
그것은 "문제를 해결"하지 않았고 그냥 무시했습니다.
버팔로

Services.msc에서 RedisServer를 다시 시작하면 나에게 도움이되었습니다.
ViPuL5

서버를 다시 시작할 때마다 동일한 문제가 다시 발생합니다. 그런 다음 다시 설정해야합니다. 영구적으로 만들려면 어떻게해야합니까?
Zia Qamar

@ZiaQamar, 당신은 "아니오 정지 - 쓰기 - 온 - bgsave 오류"로 설정 대부분 /etc/redis/redis.conf에있을 redis.conf,에 영구적으로 속성을 설정할 수 있습니다
Gaurav Tyagi에게

IMO는 확실히 해결책이 아닙니다. Redis에 이러한 오류를 기록하지 말라고 지시하고 있습니다. 그러나 오류는 여전히 존재합니다 ...
Erowlin

17

Redis에 쓰기 권한이있는 디렉토리에서 Redis 서버를 시작하십시오.

위의 답변은 문제를 확실히 해결하지만 실제로 진행중인 작업은 다음과 같습니다.

rdb.dump파일 을 저장하기위한 기본 위치 는 ./(현재 디렉토리를 나타냄)입니다. redis.conf파일 에서이를 확인할 수 있습니다 . 따라서 redis 서버를 시작하는 디렉토리는 dump.rdb파일이 작성되고 업데이트되는 위치입니다.

redis에 dump.rdb파일 을 작성할 수있는 올바른 권한이없는 디렉토리에서 redis 서버를 실행하기 시작한 것 같습니다 .

설상가상으로 redis는 rdb 파일을 만들어 데이터를 올바르게 저장할 수있을 때까지 서버를 종료 할 수 없을 것입니다.

이 문제를 해결하려면 키를 사용하여 활성 redis 클라이언트 환경으로 이동하여 키를 redis-cli업데이트 dir하고 값을 프로젝트 폴더 또는 루트가 아닌 사용자가 저장할 권한이있는 폴더로 설정해야합니다. 그런 다음 파일 BGSAVE작성을 호출하기 위해 실행 dump.rdb하십시오.

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

(이제 서버를 시작한 디렉토리에 dump.rdb 파일을 저장 해야하는 경우 , redis가 해당 디렉토리에 쓸 수 있도록 디렉토리에 대한 권한을 변경해야합니다. ).

이제 redis 서버를 종료 할 수 있습니다. 경로를 하드 코딩했습니다. 하드 코딩은 거의 좋은 방법이 아니며 프로젝트 디렉토리에서 redis 서버를 시작하고 dir key back to. /`를 변경하는 것이 좋습니다 .

CONFIG SET dir "./"
BGSAVE

이렇게하면 다른 프로젝트에 대한 redis가 필요할 때 덤프 파일이 하드 코드 된 경로의 프로젝트 디렉토리가 아닌 현재 프로젝트의 디렉토리에 작성됩니다.


덤프 파일이 저장 될 디렉토리에 대해 루트가 아닌 사용자에게 권한을 부여하십시오. 제 경우에는 다음과 같이 사용자 redis가 있습니다. sudo chown redis:redis /var/lib/redis
RoundOutTooSoon

13

MacOS를 실행 중이고 최근에 Catalina로 업그레이드 brew services restart redis경우이 문제 에서 제안한대로 실행해야합니다 .


12

이 오류가 발생하여 디스크 공간이 충분하지 않기 때문에 오류가 로그에서 파악 될 수있었습니다. 내 경우에 삽입 된 모든 데이터가 더 이상 필요하지 않았습니다. 그래서 나는 FLUSHALL을 시도했다. redis-rdb-bgsave 프로세스가 실행 중이므로 데이터를 FLUSH 할 수 없었습니다. 아래 단계를 따라 계속 진행할 수있었습니다.

  1. redis 클라이언트에 로그인
  2. 구성 설정 실행 중지-쓰기 -bgsave- 오류 아니요
  3. FLUSHALL 실행 (저장된 데이터가 필요하지 않음)
  4. 실행 구성 설정 정지 - 쓰기 - 온 - bgsave 오류의 예를

위의 단계 후에 프로세스 redis-rdb-bgsave가 더 이상 실행되지 않았습니다.


7

비슷한 문제에 직면했습니다.이 문제의 주요 원인은 redis의 메모리 (RAM) 소비였습니다. 내 EC2 시스템에는 8GB RAM이 있습니다 (협약 7.4 사용 가능)

내 프로그램이 실행 중일 때 RAM 사용량이 최대 7.2GB가되어 거의 100MB의 RAM을 남기지 않습니다. MISCONF Redis error ...

htop명령을 사용하여 RAM 소비를 확인할 수 있습니다 . htop 명령을 실행 한 후 Mem 속성을 찾으십시오 . 소비량이 많으면 (내 경우에는 7.2GB / 7.4GB였습니다) 더 큰 메모리로 인스턴스를 업그레이드하는 것이 좋습니다. 이 시나리오 config set stop-writes-on-bgsave-error no에서 서버를 사용 하면 재해가 발생하여 서버에서 실행중인 다른 서비스가 중단 될 수 있습니다 (있는 경우). 따라서 config 명령을 피하고 REDIS MACHINE을 업그레이드 하는 것이 좋습니다 .

참고 : 이 작업을 수행 하려면 htop 을 설치해야합니다 .sudo apt-get install htop

이에 대한 또 다른 해결책 은 시스템에서 실행되는 다른 RAM 과중한 서비스 일 수 있으며 서버 / 컴퓨터 / 인스턴스에서 실행중인 다른 서비스를 확인하고 필요하지 않은 경우 중지하십시오. 컴퓨터에서 실행되는 모든 서비스를 확인하려면service --status-all

그리고 config 명령을 직접 붙여 넣는 사람들을위한 제안은 그러한 명령을 사용하기 전에 약간의 재검색을 수행하고 사용자에게 경고하십시오. 그리고 @Rodrigo가 그의 의견에서 언급했듯이 : "오류를 무시하는 것은 멋지지 않습니다."

---최신 정보---

또한 특정 메모리 제한에 도달하면 Redis의 동작을 구성 maxmemory하고 maxmemory-policy정의 할 수 있습니다 . 예를 들어, 메모리 제한을 6GB로 유지하고 가장 최근에 사용한 키를 DB에서 삭제하여 redis mem 사용량이 6GB를 초과하지 않도록하려면 redis.conf 또는 CONFIG SET에서이 두 매개 변수를 설정할 수 있습니다 명령):

maxmemory 6gb
maxmemory-policy allkeys-lru

여기에서 읽을 수있는이 두 매개 변수에 대해 설정할 수있는 다른 많은 값이 있습니다 : https://redis.io/topics/lru-cache


6

보다 영구적 인 수정은 200-250 행 주위의 /etc/redis/redis.conf에서 rdb 기능에 대한 설정이 있으며 2.x 일에 redis의 일부가 아닌 것입니다.

특히

dir ./

로 변경할 수 있습니다

dir /home/someuser/redislogfiledirectory

또는 모든 저장 행을 주석 처리하고 지속성에 대해 걱정하지 않아도됩니다. (/etc/redis/redis.conf의 주석을 참조하십시오)

또한 잊지 마세요

service redis-server stop
service redis-server start

6

이러한 모든 답변은 rdb 저장이 실패한 이유를 설명하지 않습니다.


내 경우에는 redis 로그를 확인하고 다음을 발견했습니다.

14975 : M 18 6 월 13 : 23 : 07.354 # 백그라운드 저장이 신호 9에 의해 종료되었습니다

터미널에서 다음 명령을 실행하십시오.

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

그것은 표시됩니다 :

/var/log/kern.log.1:6 월 18 일 13:23:07 10-10-88-16 커널 : [28152358.208108] 종료 된 프로세스 28416 (redis-server) total-vm : 7660204kB, anon-rss : 2285492kB, 파일 RSS : 0kB

그게 다야! 이 프로세스 (redis save rdb)는 OOM killer에 의해 종료됩니다.

참조 :

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

Linux OOM 킬러가 종료 한 프로세스 찾기


3

FWIW, 나는 이것을 만났고 해결책은 단순히 상자에 스왑 파일을 추가하는 것이 었습니다. 나는이 방법을 사용했다 : https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04


메모리 오버 플로우가 문제라는 것을 어떻게 알았습니까? 같은 문제가있을 수 있습니다.
DarthSpeedious

@DarthSpeedious 기억이 나지 않습니다. 내가 추측해야한다면 로그에 무언가 메모리를 할당 할 수 없다는 불만이 있다고 말할 것입니다. 더 도움을 줄 수 없어서 죄송합니다.
Ryan Angilly 2016 년

나는 또한 생각 첫째로 그것은 스왑과 작업에 훌륭한 솔루션이 될 것이며, 나는 몇 가지 조사를하고이 문서에 도달 한 후 결합 레디 스 antirez.com/news/52 어쨌든 내가 아니다, 그것은 레디 스를 사용하는 잘못된 방법입니다 주장, 100 % 동의합니다. Redis를 스왑과 함께 사용하는 것에 만족하십니까?
talsibony

1
@DarthSpeedious Redis 로그에 " 메모리를 할당 할 수 없습니다 "오류가 표시됩니다. 로그 파일을 보는 방법은 여기를 참조하십시오 : stackoverflow.com/questions/16337107/…
Bruno Peres

3

나도 같은 문제에 직면했다. 두 답변 (가장 많이 찬성 한 답변과 승인 된 답변) 모두에 대해 일시적으로 수정합니다.

또한 config set stop-writes-on-bgsave-error no이 옵션을 사용하면 쓰기가 중지되었음을 알리고 스냅 샷에 데이터를 쓰지 않고 계속 진행할 수 있기 때문에이 오류를 간과하는 끔찍한 방법입니다. 이것은 단순히이 오류를 무시하는 것입니다. 이것을 참조하십시오

설정에 관해서 dirconfig당신은 레디 스 서비스를 다시 시작하면 레디 스-CLI에서,이 너무 지워지지하며 같은 오류가 다시 팝업된다. 의 기본값 dir인은 redis.conf이다 ./, 당신은 루트 사용자로 레디 스를 시작하면, 다음 ./입니다 /따라서 오류 쓰기 권한이 부여되지 않습니다 어떤합니다.

가장 좋은 방법은 dirredis.conf 파일 에서 매개 변수 를 설정하고 해당 디렉토리에 대한 적절한 권한을 설정하는 것입니다. 데비안 배포판의 대부분은/etc/redis/redis.conf


3

요즘에는 클라이언트에이 오류 메시지를 표시하는 Redis 쓰기 액세스 문제가 공식 redis도커 컨테이너 에 다시 나타납니다 .

공식 redis이미지의 Redis 는 .rdb 파일을 컨테이너 /data폴더 에 쓰려고 시도합니다.이 폴더는 루트 소유 폴더이며 비 지속적 위치이므로 컨테이너 / 포드의 경우 데이터가 사라집니다. 충돌).

따라서 한 시간 동안 활동이 없으면 redis컨테이너를 루트가 아닌 사용자로 실행 한 경우 (예 : docker run -u 1007default가 아닌 경우 docker run -u 0) 서버 로그 에 오류 메시지가 표시됩니다 (참조 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

따라서 컨테이너의 /data폴더를 외부 위치 (여기서 루트가 아닌 사용자 (1007)는 /tmp호스트 컴퓨터 와 같은 쓰기 액세스 권한이있는 위치 )에 매핑해야합니다 . 예 :

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

따라서 공식 도커 이미지의 구성이 잘못되어 (이에 쓰지 /tmp않아야 함 /data) 프로덕션에서 만날 가능성이 높은 "시한 폭탄"을 생성합니다. 특히 조용한 휴일 주말 동안 밤새 : /


1
Docker에서 redis에 직면 한 문제를 해결하는 데 도움이되었으므로 여기에 의견을 추가하고 싶었습니다. 우리의 UAT 및 Dev Docker 서버는 Windows입니다. Windows Defender는 RDB 파일을 잠재적 인 바이러스로 식별합니다. 따라서 / data 디렉토리를 마운트하면 일시적으로 상위 문제가 해결됩니다. Windows Defender가 파일을 검역소에 보관하여 다른 파일을 생성 할 때까지 Windows Defender에서 마운트 된 데이터 디렉토리를 예외로 추가하여이 문제를 해결하십시오.
TrevorB

1
저를 생각 나게 : Windows Defender는 경고가 반드시 거짓 양성하지 않을 수 - 루트없이 모든 기능을 떨어 그것을 실행할 때 cryptominer도 공식 레디 스 이미지를 감염시킬 수 있습니다 - 그물에 그 포트를 노출 충분
mirekphd

고마워, 좋은 지적이야 호기심이 많지만 RDB 파일이 호스트, 특히 Windows 파일에서 어떻게 실행됩니까? 컨테이너 자체에서 실행될 수 있다고 가정합니다. 그러나 이것은 특정 컨테이너에만 국한된 것은 아닙니다.
TrevorB

1
오른쪽, 페이로드는 아마도 완전히 루아에 따라서 레디 스 자체 크로스 플랫폼으로 작성하지 않는 한, Windows에서 실행하는 데 실패 ... 평가 명령에 관계없이 언어, 악마의 발명품이다
mirekphd

이것은 계몽적인 경험이었습니다. 매우 감사합니다. 분명히 우리의 UAT / DEV 작성 파일은 Docker 네트워크 외부의 포트를 노출하고있었습니다. 이것이 어떻게 가능한지 모르겠지만 그 인스턴스는 관리자 명령을 받았으며 실제로였습니다. 암호화 광부를 시작했습니다. 해당 포트를 비활성화하고 로컬 RDB 마운트를 해제 한 다음 Windows Defender 예외를 복원했습니다 (마운트 해제와 상관 없습니다). 이 명령이 방화벽을 통과하는 방법을 조사해야하지만 면밀히 모니터링하고 있습니다.
TrevorB

3

나를 위해

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

Mac을 새로 고침하면 작동합니다.


1

인증 토큰이 만료되어 AFS 디스크 공간이있는 서버에서 작업하는 동안이 문제가 Permission Denied발생하여 redis-server가 저장을 시도 할 때 응답 을 얻었습니다 . 토큰을 새로 고침하여이 문제를 해결했습니다.

kinit USERNAME_HERE -l 30d && aklog


1

경우 사용중인 고정 표시기 / 고정 표시기-작성을 하고 파일에 쓰는 레디 스 않도록하려면, 당신은 레디 스의 설정을 만들 수 있습니다 및 용기에 장착

docker.compose.override.yml

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

여기 에서 기본 구성을 다운로드 할 수 있습니다

redis.conf 파일에서이 세 줄을 주석 처리하십시오

save 900 1
save 300 10
save 60 10000

m 여기 에서 영구 데이터를 제거하기위한 더 많은 솔루션을 볼 수 있습니다


1

제 경우에는 방금 redis빠른 방법으로 설치했기 때문에 발생했습니다 . 따라서 redis는 루트로 실행되지 않습니다. 빠른 시작 안내서Installing Redis more properly 섹션의 지침에 따라이 문제를 해결할 수있었습니다 . 이렇게하면 문제가 해결되어 이제 루트로 실행됩니다. 확인 해봐.redis


1

@Axel Advento의 답변은 효과가 있었지만 추가 단계가 거의 없었지만 너무 많은 SO 질문을 통해 머리를 두드린 후에도 여전히 권한 문제에 직면했습니다.
사용자를로 전환 redis하고 홈 디렉토리에 새 디렉토리를 만든 다음 redis의 디렉토리로 설정해야했습니다.

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

0

제 경우에는 디스크 여유 공간과 관련이있었습니다. (여기에서 df -hbash 명령으로 확인할 수 있습니다 ) 공간을 확보하면이 오류가 사라졌습니다.


0

Windows 시스템에서 Redis를 로컬로 실행중인 경우 "관리자 권한으로 실행"을 시도하여 작동하는지 확인하십시오. 나와 함께, 문제는 Redis가 "Program Files"폴더에 있으며, 기본적으로 권한을 제한합니다. 그렇습니다.

그러나 관리자로 Redis를 자동으로 실행하지 마십시오 권한 하지 마십시오. 더 많은 권한을 부여하고 싶지 않습니다. 당신은 책으로 이것을 해결하고 싶습니다.

따라서 문제를 관리자로 실행하여 문제를 신속하게 식별 할 수 있었지만 해결 방법은 아닙니다. 시나리오는 쓰기 권한이없는 폴더에 Redis를 넣고 결과적으로 DB 파일이 동일한 위치에 저장되어있는 것입니다.

및를 열어 redis.windows.conf다음 구성을 검색 하면이 문제를 해결할 수 있습니다 .

    # 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 ./

dir ./정기적 인 읽기 / 쓰기 권한이있는 경로로 변경

Redis 폴더 전체를 올바른 권한이있는 폴더로 이동할 수도 있습니다.


0

나에게 그것은 단지 지속적인 redis 데이터 폴더에 대한 권한 문제였습니다. 나는 그것을 주었다 :

chmod 777 -Rf data/

그리고 그것은 작동합니다! 문제가 해결되었다고 말하기는 어려울 수 있습니다. 또한 redis가 루트로 실행되지 않는 것으로 의심되므로 dockerFile을 검사하여 자세한 내용을 확인해야합니다.


0

조치를 취하기 전에 Redis 로그를 확인하십시오. 이 스레드의 일부 솔루션은 Redis 데이터를 지울 수 있으므로 수행중인 작업에주의하십시오.

필자의 경우 머신에 RAM 이 부족했습니다 . 호스트에 디스크 여유 공간 이 더 이상 없는 경우에도 발생할 수 있습니다 .


0

이 오류는 서버가 공격을 받고있을 때 나타납니다. redis가 '/etc/cron.d/web'에 쓸 수 없다는 것을 발견했습니다. 권한을 수정 한 후 일부 숨김 옵션이있는 마이닝 알고리즘으로 구성된 새 파일이 추가되었습니다.


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

-1

@Chris가 지적한 것처럼 문제는 메모리가 부족할 수 있습니다. 우리는 MySQL에 너무 많은 RAM을 할당했을 때 그것을 경험하기 시작했습니다.innodb_buffer_pool_size ).

Redis 및 기타 서비스에 충분한 RAM이 있는지 확인하기 위해 innodb_buffer_pool_sizeMySQL에서 줄였습니다 .


-1

필자의 경우 그 이유는 디스크의 사용 가능한 공간이 매우 적기 때문입니다 (35MB 만). 나는 다음을했다-

  1. 모든 Redis 관련 프로세스를 중지했습니다
  2. 충분한 여유 공간을 확보하기 위해 디스크의 일부 파일을 삭제하십시오.
  3. redis 덤프 파일 삭제 (기존 데이터가 필요하지 않은 경우)

    sudo rm /var/lib/redis/*

  4. 모든 기존 데이터베이스의 모든 키를 삭제하십시오.

    sudo redis-cli flushall

  5. 모든 셀러리 작업을 다시 시작하고 문제가 있는지 해당 로그를 확인하십시오.

1
개발자 인스턴스에서이 작업을 수행해야합니다. 데이터 중심 애플리케이션을 다룰 때 올바른 솔루션이 아닙니다.
Nikesh Devaki

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.