MISCONF Redis, RDB anlık görüntülerini kaydetmek için yapılandırıldı


367

Redis ( SET foo bar) için yazma sırasında Aşağıdaki hatayı alıyorum:

MISCONF Redis, RDB anlık görüntülerini kaydetmek için yapılandırılmıştır, ancak şu anda diskte devam edememektedir. Veri kümesini değiştirebilecek komutlar devre dışı bırakılır. Hatayla ilgili ayrıntılar için lütfen Redis günlüklerini kontrol edin.

Temel olarak, sorunun redis'in diske veri kaydedemediğini, ancak problemden nasıl kurtulacağını bilmediğini anlıyorum.

Ayrıca aşağıdaki soru aynı soruna sahiptir, uzun zaman önce cevapsız ve muhtemelen sorunu çözme girişimi olmadan terk edilmiştir.


bu sorunu çözebildiniz. Evet ise, lütfen bu adımlara yardımcı olabilir misiniz? Çünkü rdb dosyasını başka bir yere yerleştirerek bunu çözmezdim sanırım. Sanırım burada bir şey eksik
ankur

4
Bu hata, redis sunucusunun redis izinlerinin olmadığı bir dizinde başlatılması nedeniyle oluşur. Sorunu çözdükten sonra varsayılan ayarlara geri dönmenizi öneririz: Bu sorunu gidermek için verilen cevaba bakın .
Govind Rai


@GovindRai Hem grubu hem de sahibini değiştirerek redis izni verdim redis, ancak yardımcı olmuyor!
wdetac

ilk hızlı kontrol olarak, diskte yer kaldığından emin olun
panchicore

Yanıtlar:


184

Hatayla karşılaşırsanız ve bazı önemli veriler çalışan redis örneğinde silinemezse ( rdbdosya veya dizinin izinleriyle ilgili sorunlar yanlış veya disk alanınız tükeniyorsa), her zamanrdb başka bir yere yazılmak dosyayı .

Kullanarak redis-cli, böyle bir şey yapabilirsiniz:

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

Bundan sonra BGSAVE, verilerin rdbdosyaya yazıldığından emin olmak için bir komut yürütmek isteyebilirsiniz . Eğer yürütmek zaman emin olun INFO persistence, bgsave_in_progresszaten 0ve rdb_last_bgsave_statusbir ok. Bundan sonra, oluşturulan rdbdosyayı güvenli bir yere yedeklemeye başlayabilirsiniz .


7
rdb_bgsave_in_progress: 0 Sebat altında
thanikkal

Herhangi bir yapılandırma komutunu denediğimde, sonsuza kadar yüklemeye devam ediyor gibi.
Beşar Abdullah

5
Şu anda Windows me üzerine, ve MSOpenTech sürümünü kullanıyorsanız çüş o talihsiz olanlar için aşağıdaki tarzda set dizin yolu vardır: dir C:/Temp/. Çalıştığını doğrulamak için bir bgsave yapın ..
John P

@John P, yapılması gereken buydu. Teşekkür ederim!
Sam

2
127.0.0.1:6379> CONFIG SET dir / root / tool (hata) ERR Dizini değiştirme: İzin verilmedi
Gank

319

Kullanarak redis-cli, anlık görüntüyü kaydetmeye çalışarak durdurabilirsiniz:

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

Bu hızlı bir çözümdür, ancak kullandığınız verileri önemsiyorsanız, bgsave'nin neden ilk etapta başarısız olduğunu kontrol etmelisiniz.


21
Bu hızlı bir çözüm ama bgsave'nin neden ilk etapta başarısız olduğundan emin olmalısınız
Mandeep Singh

7
Redis'i esas olarak önbellekleme ve oturumlar için kullanıyorsanız, bu bir zorunluluktur.
Jim

1
Bu tehlikeli değil mi? Örneğin, NodeBB Redis'i veri deposu olarak kullanır.
codecowboy

2
@LoveToCode yapılandırma kümesi bgsave-stop-writes-on hatası evet
Phil

4
Sunucuyu yeniden başlattığımda aynı sorunu tekrar aldım. Sonra tekrar ayarlamalıyım. Nasıl kalıcı hale getirebilirim?
Zia Qamar

63

Düşük bellek nedeniyle bgsave işlemi sırasında hatalar olabilir. Bunu deneyin (redis background save SSS'den)

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

5
LInk : redis.io/topics/faq Bunu arayın: "Çok fazla boş RAM'im olsa bile Linux altında çatal () hatası ile arka plan kaydetme başarısız! "
Bruno Peres

49

Bu hata, BGSAVE başarısız olduğu için oluşur. BGSAVE sırasında Redis, verileri diske kaydetmek için bir alt süreç çatallar. Her ne kadar BGSAVE'nin arızalanmasının kesin nedeni günlüklerden (genellikle /var/log/redis/redis-server.loglinux makinelerinde) kontrol edilebilir, ancak çatal bellek ayıramadığından BGAVE başarısız olur. Çoğu zaman çatal, işletim sistemi tarafından çakışan bir optimizasyon nedeniyle (makinede yeterli RAM olmasına rağmen) bellek ayırmayı başaramaz.

Redis SSS sayfasından okunabileceği gibi :

Redis arka plan kaydetme şeması, modern işletim sistemlerinde çatalın yazma üzerine yazma semantiğine dayanır: Ebeveynin tam kopyası olan çatalları (bir alt işlem oluşturur) redis. Alt işlem DB'yi diske döker ve son olarak çıkar. Teoride, çocuk ebeveynin kopya olduğu kadar bellek kullanmalıdır, ancak aslında çoğu modern işletim sistemi tarafından uygulanan yazma üzerine yazma semantiği sayesinde ebeveyn ve çocuk süreci ortak bellek sayfalarını paylaşacaktır. Bir sayfa yalnızca alt öğede veya üst öğede değiştiğinde çoğaltılır. Teoride, alt süreç kaydedilirken tüm sayfalar değişebileceğinden, Linux önceden çocuğun ne kadar bellek alacağını söyleyemez, bu nedenle overcommit_memory ayarı sıfır çatal olarak ayarlanırsa, boş RAM fazla olmadığı sürece başarısız olur. tüm üst bellek sayfalarını gerçekten çoğaltmak için gerekli,

Overcommit_memory değerini 1 olarak ayarlamak, Linux'un daha iyimser bir tahsis tarzında çatalı rahatlatacağını ve gerçekleştireceğini söylüyor ve bu Redis için gerçekten istediğiniz şey.

Redis, işletim sisteminin diske yazmayı düşündüğü kadar belleğe ihtiyaç duymaz, bu nedenle çatalı önceden etkin bir şekilde bozabilir.

Bunu çözmek için şunları yapabilirsiniz:

Değiştirin /etc/sysctl.confve ekleyin:

vm.overcommit_memory=1

Sonra sysctl ile yeniden başlatın:

FreeBSD'de:

sudo /etc/rc.d/sysctl reload

Linux'ta:

sudo sysctl -p /etc/sysctl.conf

Çıktı systemctl status redis, overcommit_memory=0ayarın tam olarak değiştirilmesini öneren bir uyarı olduğunu ortaya koydu . Bunu değiştirmek gerçekten benim için problemi çözdü.
Soyut Algoritma

Bu, sorunu doğru bir şekilde çözdü ve kabul edilen cevap olmalı
DSynergy

Yani tldr, varsayılan ayarlarla, redis 10 gb ram kullanıyorsa, bu alt sürecin çalışabilmesi için 10 gb ram ücretsiz olması gerekir mi?
Dan Hastings

@DanHastings - Evet. Ve overcommit_memory değerini 1 olarak ayarlamak bu gereksinimi azaltır.
Bhindi

27

Redis sunucunuzu yeniden başlatın.

  • MacOS (hazırlama) : brew services restart redis.
  • Linux: sudo service redis restart /sudo systemctl restart redis
  • Windows: Windows + R-> Tür services.msc, Enter-> Ara'yı Redistıklayın ve tıklayın restart.

Şahsen Brew ( brew upgrade) ile redis yükselttikten sonra bu sorunu vardı . Dizüstü bilgisayarı yeniden başlattıktan sonra hemen çalıştı.


Bunu duyan kimse ise ben yükseltme ile ilgisi de başka bir şey olarak Homebrew ile sorunu vardı: Sadece ile hizmetini başlatmak için gereken sudo: brew services stop redis; sudo brew services start redis.
bfontaine

24

bir linux makinesinde çalışıyorsanız, veritabanının dosya ve klasör izinlerini de yeniden kontrol edin.

Db ve yolu aşağıdaki yollarla elde edilebilir:

içinde redis-cli:

CONFIG GET dir

CONFIG GET Instagram Hesabındaki Resim ve Videoları dbfilename

ve komut satırında ls -l. Dizin izinleri 755 , dosya izinleri 644 olmalıdır . Ayrıca, normal olarak redis-server kullanıcı olarak yürütülür redis, bu nedenle kullanıcıya redisklasöre sahipliğini vermek de iyidir sudo chown -R redis:redis /path/to/rdb/folder. Bu cevap hakkında açıklamalar, burada .


Hangi izinler olmalı?
stephen

19

Sorunu kontrol ettiğiniz için herkese teşekkürler, görünüşe göre hata sırasında üretildi bgsave.

Benim config set stop-writes-on-bgsave-error noiçin bir mermi yazmak ve Redis'i yeniden başlatmak sorunu çözdü.


83
Bu "sorunu çözmedi", sadece görmezden geldi.
Buffalo

RedisServer'ı Services.msc içinde yeniden başlatmak benim için çalıştı.
ViPuL5

Sunucuyu yeniden başlattığımda aynı sorunu tekrar aldım. Sonra tekrar ayarlamalıyım. Nasıl kalıcı hale getirebilirim?
Zia Qamar

@ZiaQamar, özelliği büyük olasılıkla /etc/redis/redis.conf adresinde bulunan redis.conf'da kalıcı olarak ayarlayabilirsiniz, "bgsave-on-bgsave-hata no dur" u ayarlayın
Gaurav Tyagi

IMO kesinlikle çözüm değil. Sadece Redis'e bu hataları kaydetmemesini söylüyorsunuz. Ama hatalar hala orada ...
Erowlin

17

Redis Server'ı, Redis'in yazma izinlerine sahip olduğu bir dizinde başlatın

Yukarıdaki cevaplar sorununuzu kesinlikle çözecektir, ancak gerçekte olan şu:

rdb.dumpDosyayı saklamak için varsayılan konum ./(geçerli dizini gösterir). Bunu redis.confdosyanızda doğrulayabilirsiniz . Bu nedenle, redis sunucusunu başlattığınız dizin bir dump.rdbdosyanın oluşturulacağı ve güncelleneceği yerdir .

Redis sunucusunu, redis'in dump.rdbdosyayı oluşturmak için doğru izinlere sahip olmadığı bir dizinde çalıştırmaya başladığınız anlaşılıyor .

Daha da kötüsü, redis ayrıca verilerin düzgün bir şekilde kaydedilmesini sağlamak için rdb dosyasını oluşturabilene kadar sunucuyu kapatmanıza da izin vermez.

Bu sorunu çözmek için redis-cli, diranahtarı kullanarak etkin redis istemci ortamına gitmeli ve güncellemeli ve değerini proje klasörünüze veya kök olmayan kaydetme izinlerine sahip herhangi bir klasöre ayarlamalısınız. Sonra dosyanın BGSAVEoluşturulmasını çağırmak için çalıştırın dump.rdb.

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

(Şimdi, dump.rdb dosyasını sunucuyu başlattığınız dizine kaydetmeniz gerekiyorsa , dizinin izinlerini değiştirmeniz için redis'in ona yazabilmesi gerekir. ).

Artık redis sunucusunu kapatabilirsiniz. Yolu kodladığımızı unutmayın. Hardcoding nadiren iyi bir uygulamadır ve redis sunucusunu proje dizininizden başlatmanızı ve dir key back to. / ` Değiştirmenizi önemle tavsiye ederim .

CONFIG SET dir "./"
BGSAVE

Bu şekilde, başka bir proje için yeniden redüksiyona ihtiyaç duyduğunuzda, döküm dosyası sabit kodlu yolun proje dizininde değil, geçerli projenizin dizininde oluşturulur.


Döküm dosyasının saklanacağı dizin için kök olmayan kullanıcının iznini verdiğinizden emin olun. Benim durumumda, ben de bir kullanıcı redisvar: sudo chown redis:redis /var/lib/redis
RoundOutTooSoon

13

MacOS çalıştırıyorsanız ve kısa süre önce Catalina sürümüne geçtiyseniz, bu sayıdabrew services restart redis önerildiği gibi çalıştırmanız gerekebilir .


12

Bu hatayla karşılaşmıştı ve hatanın disk alanının yeterli olmaması nedeniyle günlükten anlayabilmişti. Benim durumuma eklenen tüm verilere artık gerek yoktu. Bu yüzden FLUSHALL yapmaya çalıştım. Redis-rdb-bgsave işlemi çalıştığından, verilerin FLUSH olmasına da izin vermiyordu. Aşağıdaki adımları izledim ve devam edebildim.

  1. Redis istemcisine giriş
  2. Yürütme yapılandırma kümesi dur-yazma-on-bgsave-yanılma yok
  3. Yürütme FLUSHALL (Veri gerekli değildi saklanan)
  4. Yürütme yapılandırma kümesi dur-yazma-on-bgsave yanılma evet

İşlem redis-rdb-bgsave, yukarıdaki adımlardan sonra artık çalışmıyordu.


7

Benzer bir sorunla karşı karşıya kaldım, bunun arkasındaki ana sebep redis tarafından bellek (RAM) tüketimi oldu. EC2 makinemde 8GB RAM vardı (tüketim için 7.4 mevcut)

Programım çalışırken RAM kullanımı 7,2 GB'a kadar çıkmış ve RAM'de ~ 100MB güçlük çekiyor, bu genellikle MISCONF Redis error ...

RAM tüketimini htopkomutunu kullanarak belirleyebilirsiniz . Htop komutunu çalıştırdıktan sonra Mem niteliğini arayın . Yüksek tüketim gösteriyorsa (benim durumumda olduğu gibi 7.2GB / 7.4GB idi) Örneğin daha büyük Bellek ile yükseltmek daha iyidir. Bu senaryoda kullanmak config set stop-writes-on-bgsave-error nosunucu için bir felaket olacaktır ve sunucuda (varsa) çalışan diğer hizmetlerin bozulmasına neden olabilir. Bu nedenle, config komutundan kaçınmak ve REDIS MAKİNENİZİ YÜKSELTİN .

Bilginize: Bu işi yapmak için htop yüklemeniz gerekebilir :sudo apt-get install htop

Buna bir çözüm daha sisteminizde çalışan diğer RAM ağır hizmet olabilir, sunucunuzda / makinenizde / örneğinizde çalışan diğer hizmetleri kontrol edin ve gerekli değilse durdurun. Makinenizde çalışan tüm hizmetleri kontrol etmek içinservice --status-all

Ve doğrudan config komutunu yapıştıran insanlar için bir öneri, lütfen biraz yeniden arama yapın ve en azından bu tür komutları kullanmadan önce kullanıcıyı uyarın. @Rodrigo'nun yorumunda belirttiği gibi: "Hataları görmezden gelmek hoş görünmüyor."

---GÜNCELLEME---

Ayrıca , belirli bir bellek sınırına ulaşıldığında Redis'in davranışını yapılandırabilir maxmemoryve maxmemory-policytanımlayabilirsiniz. Örneğin, redis mem kullanımının 6GB'ı aşmadığından emin olmak için 6GB bellek sınırını korumak ve en son kullanılan anahtarları DB'den silmek istiyorsam, bu iki parametreyi (redis.conf veya CONFIG SET'te) ayarlayabiliriz. komutu):

maxmemory 6gb
maxmemory-policy allkeys-lru

Buradan bu konuda okuyabileceğiniz bu iki parametre için ayarlayabileceğiniz başka birçok değer vardır: https://redis.io/topics/lru-cache


6

Daha kalıcı bir düzeltme, 200-250 satırları arasında /etc/redis/redis.conf dosyasına bakmak olabilir.

özellikle

dir ./

olarak değiştirilebilir

dir /home/someuser/redislogfiledirectory

veya tüm kaydetme satırlarını yorumlayabilir ve kalıcılık konusunda endişelenmeyebilirsiniz. (/Etc/redis/redis.conf'daki yorumlara bakın)

Ayrıca unutma

service redis-server stop
service redis-server start

6

tüm bu cevaplar rdb kaydının neden başarısız olduğunu açıklamaz.


Benim durumum olarak, redis günlüğünü kontrol ettim ve buldum:

14975: M 18 Jun 13: 23: 07.354 # Sinyal 9 ile sonlandırılan arka plan kaydetme

terminalde aşağıdaki komutu çalıştırın:

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

görüntüler:

/var/log/kern.log.1:Haziran 18 13:23:07 10-10-88-16 çekirdek: [28152358.208108] Öldürülen süreç 28416 (redis-sunucu) toplam-vm: 7660204kB, anon-rss: 2285492kB, dosya rss 0KB

bu kadar! bu süreç (redd save rdb) OOM katili tarafından öldürüldü

atıfta:

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

Linux OOM katili tarafından hangi sürecin öldürüldüğünü bulma


3

FWIW, bununla karşılaştım ve çözüm kutuya bir takas dosyası eklemekti. Bu yöntemi kullandım: https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04


Sorunun bellek taşması olduğunu nasıl anladınız? Aynı sorunu yaşıyor olabilirim.
DarthSpeedious

@DarthSpeedious hatırlamıyorum. Tahmin etmeliydim, belki de günlüklerdeki bir şey hafızayı tahsis edememekten şikayet ediyordu. Üzgünüm daha fazla yardımcı olamam.
Ryan Angilly

Öncelikle takas ve redis ile çalışmak için harika bir çözüm olacağını düşündüm, sonra biraz araştırma yaptım ve bu makaleye ulaştım antirez.com/news/52 , bu da redis kullanmanın yanlış bir yol olduğunu iddia ediyor, yine de değilim % 100 katılıyorum, redis'i takas ile kullanma performansından memnun musunuz?
talsibony

1
@DarthSpeedious Redis günlüğünüzde " Bellek ayrılamıyor " hatalarını görürsünüz . Günlük dosyasını nasıl göreceğinize bakın: stackoverflow.com/questions/16337107/…
Bruno Peres

3

Ben de aynı sorunla karşı karşıyaydım. Hem cevaplar (en çok oylanan ve kabul edilen) hem de geçici olarak düzeltildi.

Dahası, config set stop-writes-on-bgsave-error nobu hatayı gözden geçirmek için korkunç bir yoldur, çünkü bu seçeneğin yaptığı, yazma işlemlerinin durdurulduğunu bildirmek ve verileri bir anlık görüntüye yazmadan devam etmek için redis'i durdurmaktır. Bu sadece bu hatayı yok sayıyor. Buna bakın

Ayarı gelince dirde configsen Redis hizmetini yeniden bir kere Redis-cli içinde, bu çok temizlenmezse eder ve aynı hata tekrar açılır edecektir. Varsayılan değeri diriçinde redis.confolduğunu ./ve kök kullanıcı olarak REDIS başlarsanız, o zaman ./olduğunu /dolayısıyla hata yazma izinleri verilmeyen oldukları ve.

En iyi yol, dirparametreyi redis.conf dosyasında ayarlamak ve bu dizine uygun izinleri ayarlamaktır. Debian dağıtımlarının çoğunda/etc/redis/redis.conf


3

Günümüzde istemciye bu hata iletisini veren Redis yazma erişim sorunları resmi redisliman işçisi konteynırlarında yeniden ortaya çıktı .

Dan Redis resmi redisgörüntü denemeden kaplarda .rdb dosyası yazmak için /databir kök sahip olduğu klasör olduğu gibi, oldukça talihsiz klasörü ve çok kalıcı olmayan bir konumdur (yazılı veri yoktur kaybolur eğer konteyner / pod ) çöker.

Bu nedenle, bir saatlik bir işlem yapılmadığında, rediskapsayıcınızı kök olmayan bir kullanıcı olarak çalıştırdıysanız (örneğin docker run -u 1007, varsayılan olarak değil docker run -u 0), sunucu günlüğünüzde ayrıntılı bir hata iletisi alırsınız (bkz. 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

Yapmanız gereken, kapsayıcı /dataklasörünü harici bir konuma eşlemek (kök olmayan kullanıcının burada: 1007, /tmpana makine gibi yazma erişimine sahip olduğu ), örn:

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

O (yazmalıdır resmi liman işçisi görüntünün bir yanlış yapılandırma olduğu Yani /tmpdeğil /data/: Öyle olacağına büyük olasılıkla karşılaşma sadece üretimde ... gecede bazı özellikle sessiz tatil hafta sonu bu "saatli bombayı" üretir)


1
Buraya bir yorum eklemek istedim, çünkü bu sonuçta Docker'da redis ile karşılaştığım sorunları çözmeye yardımcı oldu. UAT ve Dev Docker sunucularımız Windows'tur. Windows Defender, RDB dosyalarını potansiyel virüs olarak tanımlar. Böylece / data dizininizin bağlanması ana sorunu geçici olarak çözecektir; Windows Defender dosyayı karantinaya alana kadar başka bir dosyaya neden olana kadar. Bunu çözmek için Windows Defender'da bağlı veri dizinini bir istisna olarak eklediğinizden emin olun.
TrevorB

1
Hatırlatıyor: Windows Defender uyarısı mutlaka yanlış bir pozitif olmayabilir - bir kriptomer, resmi Redis görüntüsünü root olmadan çalıştırırken ve tüm yetenekler düştüğünde bile enfekte edebilir - bağlantı noktasını net olarak ortaya çıkarmak yeterlidir
mirekphd

Teşekkürler, bu iyi bir nokta. Sadece merak ediyorum, ancak bir RDB dosyası ana bilgisayarda, özellikle bir Windows'da nasıl çalışır? Sanırım kabın içinde de olabilir. Ancak bu belirli bir kaba özgü değildir.
TrevorB

1
Doğru, tamamen Lua'da ve dolayısıyla Redis'in kendisi gibi çapraz platformda yazılmadıkça, yükün Windows'ta yürütülememesi muhtemeldir ... eval komutu dilden bağımsız olarak bir şeytanın icadıdır
mirekphd

Bu aydınlatıcı bir deneyim oldu; çok teşekkürler. Görünüşe göre, UAT / DEV oluşturma dosyalarımız Docker ağının dışındaki bağlantı noktalarını açığa çıkarıyordu. Bunun nasıl mümkün olduğunu bilmiyorum, ama bu örnekler yönetici komutları alıyordu ve gerçekten de. bir kripto madencisi fırlatıyorlardı. Bu bağlantı noktalarını devre dışı bıraktım, yerel RDB montajını kapattım ve Windows Defender istisnasını yeniden oluşturdum (yine de, bağlantının kapalı olması önemli değil). Bu komutların güvenlik
duvarımızdan

3

benim için

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

ve mac'umu yeniden yüklüyorum, işe yarıyor


1

AFS disk alanı olan bir sunucu üzerinde çalışırken bu soruna Permission Deniedçarptım, çünkü redis sunucusu kaydetmeye çalıştığında yanıt verdi . Jetonumu yenileyerek bunu çözdüm:

kinit USERNAME_HERE -l 30d && aklog


1

Docker / Docker-Compose kullanıyorsanız ve dosyaya yazma den REDIS önlemek istiyorsanız, bir Redis yapılandırma oluşturabilir ve bir kabın içine monte

docker.compose.override.yml

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

Sen varsayılan yapılandırma indirebilirsiniz burada

redis.conf dosyasında bu 3 satırı yorumladığınızdan emin olun

save 900 1
save 300 10
save 60 10000

myou kalıcı veri çıkarılması için daha fazla çözüm görüntüleyebilir burada


1

Benim durumumda oldu çünkü redishızlı bir şekilde kullanarak yeni kurdum . Yani redis kök olarak çalışmıyor. Bu sorunu Hızlı Başlangıç ​​KılavuzuInstalling Redis more properly bölümünün altındaki talimatları izleyerek çözebildim . Bunu yaptıktan sonra, sorun çözüldü ve şimdi kök olarak çalışıyor. Bunu kontrol et.redis


1

Sonunda pek çok SO sorusuna kafamı vurduktan sonra - benim için @Axel Advento'nun cevabı çalıştı ama birkaç ekstra adımla - hala izin sorunları ile karşı karşıyaydım.
Kullanıcıya geçmek redis, ev dizininde yeni bir dizin oluşturmak ve ardından redis'in dizini olarak ayarlamak zorunda kaldım.

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

Benim durumumda disk boş alanıyla ilgiliydi. ( df -hbash komutuyla kontrol edebilirsiniz ) biraz boşluk bıraktığımda bu hata kayboldu.


0

Redis'i yerel olarak bir Windows makinesinde çalıştırıyorsanız, "yönetici olarak çalıştır" ı deneyin ve çalışıp çalışmadığına bakın. Benimle sorun, Redis'in varsayılan olarak izinleri kısıtlayan "Program Files" klasöründe bulunmasıydı. Olması gerektiği gibi.

Ancak Redis'i otomatik olarak yönetici olarak çalıştırmayın Ona sahip olması gereken daha fazla hak vermek istemezsiniz. Bunu kitapla çözmek istiyorsun.

Bu nedenle, sorunu yönetici olarak çalıştırarak hızlı bir şekilde tanımlayabildik, ancak bu tedavi değil. Muhtemel bir senaryo, Redis'i yazma hakları olmayan bir klasöre koymuş olmanız ve sonuç olarak DB dosyasının aynı konumda depolanmasıdır.

redis.windows.confAşağıdaki konfigürasyonu aramak için ve tuşlarını kullanarak bunu çözebilirsiniz :

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

İçin dir ./düzenli okuma / yazma izinlerine sahip olduğunuz bir yolla değiştirin

Ayrıca, içindeki Redis klasörünü tamamen doğru izinlere sahip olduğunu bildiğiniz bir klasöre taşıyabilirsiniz.


0

Benim için bu sadece kalıcı yeniden veri veri klasöründe bir izin sorunu oldu. Ben verdim:

chmod 777 -Rf data/

Ve işe yarıyor! Sorunu çözdüğünü söylemek için erken olabilir. Ayrıca redis kök olarak yürütülmediğinden şüpheleniyorum, bu yüzden daha fazla anlamak için dockerFile incelemek gerekir.


0

Herhangi bir işlem yapmadan önce Redis günlüğünüzü kontrol edin. Bu dizideki bazı çözümler Redis verilerinizi silebilir, bu yüzden ne yaptığınıza dikkat edin.

Benim durumumda, makinenin RAM'i bitiyordu . Bu , ana bilgisayarda boş disk alanı kalmadığında da olabilir .


0

Bu hatanın sunucunuz saldırıya uğradığında göründüğünü lütfen unutmayın. Sadece redis'in '/etc/cron.d/web' dosyasına yazamadığını, burada izinlerin düzeltilmesinden sonra bazı gizleme seçenekleriyle madencilik algoritmasından oluşan yeni bir dosya eklendi.


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 tarafından işaret edildiği gibi, problemin hafızanın azalması muhtemeldir. MySQL'e ( innodb_buffer_pool_size) çok fazla RAM ayırdığımızda bunu deneyimlemeye başladık .

Redis ve diğer hizmetler için yeterli RAM olduğundan emin olmak için MySQL'de azalttık innodb_buffer_pool_size.


-1

Benim durumumda, neden diskte çok düşük boş alan (sadece 35 Mb) idi. Aşağıdakileri yaptım -

  1. Redis ile ilgili tüm işlemleri durdurdu
  2. Yeterli boş alan oluşturmak için diskteki bazı dosyaları silin
  3. Redis döküm dosyasını sil (mevcut veri gerekli değilse)

    sudo rm /var/lib/redis/*

  4. Mevcut tüm veritabanlarının tüm anahtarlarını sil

    sudo redis-cli flushall

  5. tüm kereviz görevlerini yeniden başlatın ve herhangi bir sorun için ilgili günlükleri kontrol edin

1
Bunu dev uygulamanızda yapmış olmalısınız. Veri merkezli uygulamalar için doğru çözüm değil.
Nikesh Devaki

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.