MISCONF Redis dikonfigurasi untuk menyimpan snapshot RDB

366

Selama menulis ke Redis ( SET foo bar) saya mendapatkan kesalahan berikut:

MISCONF Redis dikonfigurasi untuk menyimpan snapshot RDB, tetapi saat ini tidak dapat bertahan pada disk. Perintah yang dapat mengubah set data dinonaktifkan. Silakan periksa log Redis untuk detail tentang kesalahan.

Pada dasarnya saya mengerti bahwa masalahnya redis tidak dapat menyimpan data pada disk, tetapi tidak tahu bagaimana cara menyingkirkan masalah.

Juga pertanyaan berikut memiliki masalah yang sama, sudah lama ditinggalkan tanpa jawaban dan kemungkinan besar tidak ada upaya untuk memecahkan masalah.

Salvador Dali
sumber
apakah Anda dapat menyelesaikan masalah ini. Jika ya, bisakah Anda membantu dengan langkah-langkahnya. Karena menempatkan file rdb di tempat lain tidak akan menyelesaikannya kurasa. Saya pikir saya kehilangan sesuatu di sini
ankur
4
Kesalahan ini terjadi karena memulai server redis di direktori di mana redis tidak memiliki izin. Saya sarankan kembali ke pengaturan default setelah memperbaiki masalah: Lihat jawaban tentang perbaikan untuk masalah ini.
Govind Rai
Selain jawaban Govind Rai: stackoverflow.com/a/47880440/5649620
Vyshnav Ramesh Thrissur
@GovindRai Saya sudah memberikan izin redis dengan mengubah grup dan pemilik redis, tetapi tidak membantu!
wdetac

Jawaban:

184

Jika Anda menemukan kesalahan dan beberapa data penting tidak dapat dibuang pada instance redis yang sedang berjalan (masalah dengan izin untuk rdbfile atau direktori salah, atau kehabisan ruang disk), Anda selalu dapat mengarahkan ulang rdbfile untuk ditulis di tempat lain.

Dengan menggunakan redis-cli, Anda dapat melakukan sesuatu seperti ini:

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

Setelah ini, Anda mungkin ingin menjalankan BGSAVEperintah untuk memastikan bahwa data akan ditulis ke rdbfile. Pastikan saat Anda mengeksekusiINFO persistence , bgsave_in_progresssudah 0dan rdb_last_bgsave_statusadalah ok. Setelah itu, Anda sekarang dapat mulai membuat cadangan rdbfile yang dihasilkan di tempat yang aman.

Axel Advento
sumber
7
rdb_bgsave_in_progress: 0 di bawah Persistence
thanikkal
Untuk beberapa alasan ketika saya mencoba perintah set config, sepertinya terus memuat selamanya.
Bashar Abdullah
5
Bagi mereka yang malang yang berada di Windows, saya saat ini, dan whoa menggunakan versi MSOpenTech, Anda harus path set direktori dalam gaya berikut: dir C:/Temp/. Lakukan bgsave untuk memverifikasi bahwa itu berfungsi ..
John P
@ John P, hanya itu yang perlu dilakukan. Terima kasih!
Sam
2
127.0.0.1:6379> CONFIG SET dir / root / tool (error) ERR Mengubah direktori: Izin ditolak
Gank
317

Dengan menggunakan redis-cli, Anda dapat menghentikannya dengan mencoba menyimpan snapshot:

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

Ini adalah solusi cepat, tetapi jika Anda peduli dengan data yang Anda gunakan, Anda harus memeriksa untuk memastikan mengapa bgsave gagal sejak awal.

思考 zhe
sumber
21
ini adalah solusi cepat tetapi Anda harus memeriksa untuk memastikan mengapa bgsave gagal di tempat pertama
Mandeep Singh
7
Jika Anda menggunakan redis terutama untuk caching dan sesi, ini adalah suatu keharusan.
Jim
1
Apakah ini tidak berbahaya? Misalnya, NodeBB menggunakan Redis sebagai penyimpan data.
codecowboy
2
@LoveToCode config atur stop-write-on-bgsave-error ya
Phil
4
Setiap kali saya me-restart server saya mendapat masalah yang sama lagi. Maka saya harus mengaturnya lagi. Bagaimana saya bisa membuatnya permanen?
Zia Qamar
63

Mungkin ada kesalahan selama proses bgsave karena memori rendah. Coba ini (dari latar belakang redis, simpan FAQ)

echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1
Chris
sumber
5
LInk: redis.io/topics/faq Cari untuk ini: " Penghematan latar belakang gagal dengan kesalahan fork () di Linux bahkan jika saya memiliki banyak RAM gratis! "
Bruno Peres
49

Kesalahan ini terjadi karena BGSAVE gagal. Selama BGSAVE, Redis melakukan proses anak untuk menyimpan data pada disk. Meskipun alasan pasti untuk kegagalan BGSAVE dapat diperiksa dari log (biasanya di /var/log/redis/redis-server.logpada mesin linux) tetapi banyak kali BGAVE gagal karena garpu tidak dapat mengalokasikan memori. Berkali-kali garpu gagal mengalokasikan memori (meskipun mesin memiliki cukup RAM yang tersedia) karena optimasi yang bertentangan oleh OS.

Seperti dapat dibaca dari FAQ Redis :

Skema penyimpanan latar belakang Redis bergantung pada semantik garpu-tulis-tulis pada sistem operasi modern: Garpu redis (menciptakan proses anak) yang merupakan salinan persis dari induk. Proses anak membuang DB pada disk dan akhirnya keluar. Secara teori anak harus menggunakan memori sebanyak orang tua sebagai salinan, tetapi sebenarnya berkat semantik copy-on-write yang diterapkan oleh sebagian besar sistem operasi modern, proses orangtua dan anak akan berbagi halaman memori umum. Halaman akan digandakan hanya ketika itu berubah pada anak atau pada orang tua. Karena secara teori semua halaman dapat berubah saat proses anak disimpan, Linux tidak dapat mengatakan sebelumnya berapa banyak memori yang akan diambil anak, jadi jika pengaturan overcommit_memory diatur ke nol garpu akan gagal kecuali jika ada RAM gratis sebanyak diperlukan untuk benar-benar menggandakan semua halaman memori induk,

Pengaturan overcommit_mory ke 1 mengatakan Linux untuk bersantai dan melakukan fork dengan cara alokasi yang lebih optimis, dan ini memang yang Anda inginkan untuk Redis.

Redis tidak membutuhkan memori sebanyak yang dipikirkan oleh OS untuk menulis ke disk, jadi pre-emptively gagal menggunakan fork.

Untuk mengatasinya, Anda dapat:

Ubah /etc/sysctl.confdan tambahkan:

vm.overcommit_memory=1

Kemudian mulai kembali sysctl dengan:

Di FreeBSD:

sudo /etc/rc.d/sysctl reload

Di Linux:

sudo sysctl -p /etc/sysctl.conf
Bhindi
sumber
Keluaran systemctl status redismengungkapkan bahwa ada peringatan yang menyarankan untuk mengubah overcommit_memory=0pengaturan dengan tepat. Mengubah itu memang memecahkan masalah bagi saya.
Algoritma Abstrak
Ini menyelesaikan masalah dengan benar dan seharusnya menjadi jawaban yang diterima
DSynergy
Jadi tldr akan, dengan pengaturan default, jika redis menggunakan 10 gb ram, Anda perlu memiliki 10gb ram gratis agar proses anak ini dapat dieksekusi?
Dan Hastings
@DanHastings - Ya. Dan menetapkan overcommit_memory ke 1 melonggarkan persyaratan ini.
Bhindi
26

Mulai ulang server redis Anda.

  • MacOS (minuman) : brew services restart redis.
  • Linux: sudo service redis restart /sudo systemctl restart redis
  • Windows: Windows + R-> Ketik services.msc, Enter-> Pencarian untuk Rediskemudian klik restart.

Saya pribadi mengalami masalah ini setelah memutakhirkan redis dengan Brew ( brew upgrade). Setelah me-reboot laptop, ia segera bekerja.

Erowlin
sumber
Jika ada yang membaca ini saya punya masalah dengan Homebrew juga tapi tidak ada hubungannya dengan upgrade: Aku hanya perlu untuk memulai layanan dengan sudo: brew services stop redis; sudo brew services start redis.
bfontaine
24

jika Anda bekerja pada mesin linux, periksa kembali juga file dan folder izin dari database.

Db dan jalur menuju itu dapat diperoleh melalui:

di redis-cli:

CONFIG DAPATKAN dir

CONFIG DAPATKAN dbfilename

dan di baris perintah ls -l. Izin untuk direktori harus 755 , dan untuk file tersebut harus 644 . Juga, biasanya redis-server dijalankan sebagai pengguna redis, oleh karena itu bagus juga untuk memberikan pengguna rediskepemilikan folder dengan mengeksekusi sudo chown -R redis:redis /path/to/rdb/folder. Ini telah dijabarkan dalam jawaban di sini .

smilee89
sumber
Izin apa yang seharusnya?
stephen
Ini berhasil untuk saya. Terima kasih!
Lordwhizy
19

Terima kasih semuanya telah memeriksa masalah, ternyata kesalahan telah terjadi selama bgsave.

Bagi saya, mengetikkan config set stop-writes-on-bgsave-error noshell dan memulai ulang Redis memecahkan masalah.

Salvador Dali
sumber
82
Itu tidak "memecahkan masalah", itu hanya mengabaikannya.
Buffalo
Restart RedisServer di Services.msc bekerja untuk saya.
ViPuL5
Setiap kali saya me-restart server saya mendapat masalah yang sama lagi. Maka saya harus mengaturnya lagi. Bagaimana saya bisa membuatnya permanen?
Zia Qamar
@ZiaQamar, Anda dapat mengatur properti secara permanen di redis.conf, yang kemungkinan besar berada di /etc/redis/redis.conf, set "stop-wrote-on-bgsave-error no"
Gaurav Tyagi
IMO jelas bukan solusinya. Anda hanya meminta Redis untuk tidak mencatat kesalahan-kesalahan itu. Tapi kesalahannya masih ada ...
Erowlin
17

Mulai Redis Server di direktori di mana Redis memiliki izin menulis

Jawaban di atas pasti akan menyelesaikan masalah Anda, tetapi inilah yang sebenarnya terjadi:

Lokasi default untuk menyimpan rdb.dumpfile adalah ./(menunjukkan direktori saat ini). Anda dapat memverifikasi ini di redis.conffile Anda . Oleh karena itu, direktori dari mana Anda memulai server redis adalah tempat dump.rdbfile akan dibuat dan diperbarui.

Tampaknya Anda sudah mulai menjalankan server redis di direktori di mana redis tidak memiliki izin yang benar untuk membuat dump.rdbfile.

Lebih buruk lagi, redis mungkin juga tidak akan memungkinkan Anda untuk mematikan server sampai ia dapat membuat file rdb untuk memastikan penghematan data yang tepat.

Untuk mengatasi masalah ini, Anda harus masuk ke lingkungan klien redis aktif menggunakan redis-clidan memperbarui dirkunci dan menetapkan nilainya ke folder proyek Anda atau folder apa pun di mana non-root memiliki izin untuk menyimpan. Kemudian jalankan BGSAVEuntuk menjalankan pembuatan dump.rdbfile.

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

(Sekarang, jika Anda perlu menyimpan file dump.rdb di direktori tempat Anda memulai server, maka Anda perlu mengubah izin untuk direktori tersebut sehingga redis dapat menulisnya. Anda dapat mencari stackoverflow untuk mengetahui cara melakukannya ).

Anda sekarang dapat mematikan server redis. Perhatikan bahwa kami menyandikan jalurnya. Hardcoding jarang merupakan praktik yang baik dan saya sangat merekomendasikan memulai server redis dari direktori proyek Anda dan mengubah dir key back to. / `.

CONFIG SET dir "./"
BGSAVE

Dengan begitu ketika Anda perlu redis untuk proyek lain, file dump akan dibuat di direktori proyek Anda saat ini dan bukan di direktori proyek jalur hardcoded.

Govind Rai
sumber
Pastikan Anda memberikan izin kepada pengguna non-root untuk direktori tempat file dump akan disimpan. Dalam kasus saya, saya memiliki pengguna, redisjadi saya lakukan: sudo chown redis:redis /var/lib/redis
RoundOutTooSoon
13

Jika Anda menjalankan MacOS dan baru-baru ini ditingkatkan ke Catalina, Anda mungkin perlu menjalankan brew services restart redisseperti yang disarankan dalam masalah ini .

Fush
sumber
12

Terjadi kesalahan ini dan dapat mengetahui dari log bahwa kesalahan itu karena ruang disk tidak cukup. Semua data yang dimasukkan dalam kasus saya tidak diperlukan lagi. Jadi saya mencoba FLUSHALL. Karena proses redis-rdb-bgsave berjalan, itu tidak memungkinkan untuk FLUSH data juga. Saya mengikuti langkah-langkah di bawah ini dan dapat melanjutkan.

  1. Masuk ke redis klien
  2. Jalankan konfigurasi set stop-write-on-bgsave-error no
  3. Jalankan FLUSHALL (Data yang disimpan tidak diperlukan)
  4. Jalankan konfigurasi set stop-write-on-bgsave-error ya

Proses redis-rdb-bgsave tidak lagi berjalan setelah langkah-langkah di atas.

RCK
sumber
7

Saya menghadapi masalah yang sama, alasan utama di balik ini adalah konsumsi memori (RAM) oleh redis. Mesin EC2 saya memiliki RAM 8GB (arounf 7.4 tersedia untuk konsumsi)

Ketika program saya sedang menjalankan penggunaan RAM naik ke 7,2 GB menyisakan hampir ~ 100MB RAM, ini biasanya memicu MISCONF Redis error ...

Anda dapat menentukan konsumsi RAM menggunakan htopperintah. Cari atribut Mem setelah menjalankan perintah htop. Jika itu menunjukkan konsumsi tinggi (seperti dalam kasus saya itu 7.2GB / 7.4GB) Lebih baik untuk meng-upgrade instance dengan Memori yang lebih besar. Dalam skenario ini menggunakan config set stop-writes-on-bgsave-error noakan menjadi bencana bagi server dan dapat mengakibatkan gangguan layanan lain yang berjalan di server (jika ada). Jadi, lebih baik untuk menghindari perintah config dan MENINGKATKAN MESIN REDISMU .

FYI: Anda mungkin perlu menginstal htop untuk membuat ini berfungsi:sudo apt-get install htop

Satu lagi solusi untuk ini dapat berupa layanan berat RAM lain yang berjalan di sistem Anda, periksa untuk layanan lain yang berjalan di server / mesin / instance Anda dan hentikan jika tidak diperlukan. Untuk memeriksa semua layanan yang berjalan di mesin Anda gunakanservice --status-all

Dan saran untuk orang-orang yang secara langsung menempelkan perintah konfigurasi, silakan lakukan penelitian ulang sedikit dan minimal memperingatkan pengguna sebelum menggunakan perintah tersebut. Dan seperti @Rodrigo disebutkan dalam komentarnya: "Tidak keren untuk mengabaikan kesalahan."

---MEMPERBARUI---

Anda juga dapat mengonfigurasi maxmemorydan maxmemory-policymenetapkan perilaku Redis ketika batas memori tertentu tercapai. Sebagai contoh, jika saya ingin menjaga batas memori 6GB dan menghapus kunci yang paling baru digunakan dari DB untuk memastikan bahwa redis mem penggunaan tidak melebihi 6GB, maka kita dapat mengatur dua parameter ini (dalam redis.conf atau CONFIG SET perintah):

maxmemory 6gb
maxmemory-policy allkeys-lru

Ada banyak nilai lain yang dapat Anda tetapkan untuk dua parameter ini yang dapat Anda baca dari sini: https://redis.io/topics/lru-cache

bhatman
sumber
6

Perbaikan yang lebih permanen mungkin dengan melihat di /etc/redis/redis.conf di sekitar baris 200-250 ada pengaturan untuk fitur rdb, yang bukan merupakan bagian dari redis kembali dalam 2,x hari.

terutama

dir ./

dapat diubah menjadi

dir /home/someuser/redislogfiledirectory

atau Anda bisa berkomentar semua garis simpan, dan tidak khawatir tentang kegigihan. (Lihat komentar di /etc/redis/redis.conf)

Juga, jangan lupa

service redis-server stop
service redis-server start
Piala Sup
sumber
6

semua jawaban itu tidak menjelaskan alasan mengapa rdb save gagal.


sebagai kasus saya, saya memeriksa redis log dan menemukan:

14975: M 18 Jun 13: 23: 07.354 # Penghematan latar belakang diakhiri oleh sinyal 9

jalankan perintah berikut di terminal:

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

itu menampilkan:

/var/log/kern.log.1:Jun 18 13:23:07 10-10-88-16 kernel: [28152358.208108] Proses terbunuh 28416 (redis-server) total-vm: 7660204kB, anon-rss: 2285492kB, file-rss: 0kB

hanya itu saja! proses ini (redis save rdb) dibunuh oleh pembunuh OOM

mengacu:

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

Menemukan proses mana yang dibunuh oleh pembunuh OOM Linux

karton
sumber
3

FWIW, saya mengalami ini dan solusinya adalah dengan menambahkan swapfile ke kotak. Saya menggunakan metode ini: https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04

Ryan Angilly
sumber
Bagaimana Anda mengetahui bahwa memory overflow adalah masalahnya? Saya mungkin mengalami masalah yang sama.
DarthSpeedious
@DarthSpeedious saya tidak ingat. Jika saya harus menebak saya akan mengatakan bahwa mungkin sesuatu dalam log mengeluh tentang tidak dapat mengalokasikan memori. Maaf saya tidak bisa lebih membantu.
Ryan Angilly
Di tempat pertama saya pikir juga akan menjadi solusi yang bagus untuk bekerja dengan swap dan redis digabungkan kemudian saya melakukan riset dan mencapai artikel ini antirez.com/news/52 , yang mengklaim itu adalah cara yang salah menggunakan redis, toh saya tidak 100% setuju dengan itu, apakah Anda senang dengan kinerja menggunakan redis dengan swap?
talsibony
1
@DarthSpeedious Di Redis log Anda, Anda akan melihat kesalahan " Tidak dapat mengalokasikan memori ". Lihat di sini tentang cara melihat file log: stackoverflow.com/questions/16337107/…
Bruno Peres
3

Saya juga menghadapi masalah yang sama. Baik jawaban (yang paling banyak dipilih maupun yang diterima) hanya memberikan perbaikan sementara untuk hal yang sama.

Selain itu, config set stop-writes-on-bgsave-error noini adalah cara yang mengerikan untuk melihat kesalahan ini secara berlebihan, karena apa yang dilakukan opsi ini adalah berhenti redis untuk memberitahukan bahwa penulisan telah dihentikan dan untuk melanjutkan tanpa menulis data dalam snapshot. Ini hanya mengabaikan kesalahan ini. Lihat ini

Adapun pengaturan dirdi configredis-cli, setelah Anda me-restart layanan redis, ini akan dihapus juga dan kesalahan yang sama akan muncul lagi. Nilai default dirin redis.confadalah ./, dan jika Anda mulai redis sebagai pengguna root, maka ./adalah /izin menulis yang tidak diberikan, dan karenanya kesalahan.

Cara terbaik adalah mengatur dirparameter dalam file redis.conf dan mengatur izin yang tepat ke direktori itu. Sebagian besar distribusi debian akan memilikinya di/etc/redis/redis.conf

Mayank Sharma
sumber
3

Saat ini masalah akses tulis Redis yang memberikan pesan kesalahan ini kepada klien muncul kembali dalam rediswadah buruh pelabuhan resmi .

Redis dari gambar resmiredis mencoba untuk menulis file .rdb di /datafolder container , yang agak disayangkan, karena itu adalah folder yang dimiliki oleh root dan juga merupakan lokasi yang tidak persisten (data yang ditulis di sana akan hilang jika kontainer / pod Anda crash).

Jadi setelah satu jam tidak aktif, jika Anda telah menjalankan rediswadah Anda sebagai pengguna non-root (misal docker run -u 1007daripada default docker run -u 0), Anda akan mendapatkan pesan kesalahan yang terperinci dengan baik di log server Anda (lihat 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

Jadi yang perlu Anda lakukan adalah memetakan /datafolder kontainer ke lokasi eksternal (di mana pengguna non-root, di sini: 1007, memiliki akses tulis, seperti /tmppada mesin host), misalnya:

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

Jadi itu adalah kesalahan konfigurasi dari gambar buruh pelabuhan resmi (yang seharusnya menulis untuk /tmptidak /data) yang menghasilkan "bom waktu" yang kemungkinan besar akan Anda temui hanya dalam produksi ... semalam selama beberapa akhir pekan liburan yang sangat tenang: /

mirekphd
sumber
1
Hanya ingin menambahkan komentar di sini, karena ini pada akhirnya membantu menyelesaikan masalah yang saya hadapi dengan redis di Docker. Server UAT dan Dev Docker kami adalah Windows. Windows Defender akan mengidentifikasi file RDB sebagai virus potensial. Jadi pemasangan direktori / data Anda sementara akan menyelesaikan masalah induk; sampai Windows Defender mengkarantina file, menyebabkan yang lain. PASTIKAN Anda menambahkan direktori data yang dipasang sebagai pengecualian di Windows Defender untuk menyelesaikan ini.
TrevorB
1
Mengingatkan saya: bahwa peringatan Windows Defender mungkin tidak selalu positif palsu - cryptominer dapat menginfeksi gambar Redis resmi bahkan ketika menjalankannya tanpa root dan dengan semua kemampuan yang dibatalkan - itu cukup untuk membuka port-nya ke internet
mirekphd
Terima kasih, itu poin bagus. Hanya ingin tahu, tetapi bagaimana file RDB akan dijalankan pada host, terutama yang Windows? Saya kira itu bisa dijalankan di dalam wadah itu sendiri. Tapi itu tidak spesifik untuk wadah khusus ini.
TrevorB
1
Benar, payload mungkin akan gagal dieksekusi pada Windows, kecuali ditulis seluruhnya dalam Lua dan dengan demikian lintas-platform seperti Redis itu sendiri ... perintah eval adalah penemuan setan, terlepas dari bahasa
mirekphd
Ini merupakan pengalaman yang mencerahkan; Terima kasih banyak. Rupanya, file penulisan UAT / DEV kami mengekspos port di luar jaringan Docker. Saya tidak tahu bagaimana ini mungkin, tetapi mereka menerima perintah admin dan, memang. meluncurkan penambang crypto. Saya telah menonaktifkan port tersebut, mematikan mount RDB lokal, dan menginstal ulang pengecualian Windows Defender (meskipun, itu tidak masalah dengan mount off). Saya perlu menyelidiki BAGAIMANA perintah-perintah ini melewati firewall kami, tapi saya memantau dengan seksama
TrevorB
3

untuk saya

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

dan saya memuat ulang mac saya, itu berhasil

wweiwei
sumber
1

Saya mengalami masalah ini ketika bekerja pada server dengan ruang disk AFS karena token otentikasi saya telah kedaluwarsa, yang menghasilkan Permission Deniedrespons ketika redis-server mencoba menyimpan. Saya memecahkan masalah ini dengan menyegarkan token saya:

kinit USERNAME_HERE -l 30d && aklog

duhaime
sumber
1

Jika Anda menggunakan docker / docker-compose dan ingin mencegah redis dari menulis ke file, Anda dapat membuat konfigurasi redis dan mount ke wadah

docker.compose.override.yml

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

Anda dapat mengunduh konfigurasi default dari sini

dalam file redis.conf pastikan Anda mengomentari 3 baris ini

save 900 1
save 300 10
save 60 10000

myou dapat melihat lebih banyak solusi untuk menghapus data persisten di sini

Nic Wanavit
sumber
1

Dalam kasus saya itu terjadi karena saya baru saja menginstal redismenggunakan cara cepat. Jadi redis tidak berjalan sebagai root. Saya dapat menyelesaikan masalah ini dengan mengikuti instruksi di bawah Installing Redis more properlybagian Panduan Memulai Cepat mereka . Setelah melakukannya, masalah diselesaikan dan redissekarang berjalan sebagai root. Coba lihat.

meow2x
sumber
1

Setelah membenturkan kepala saya melalui begitu banyak pertanyaan SO akhirnya - bagi saya jawaban @Axel Advento bekerja tetapi dengan beberapa langkah tambahan - saya masih menghadapi masalah izin.
Saya harus beralih pengguna ke redis, membuat dir baru di dir home itu dan kemudian mengaturnya sebagai dir 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)
markroxor
sumber
0

Dalam kasus saya ini terkait dengan ruang kosong disk. (Anda dapat memeriksanya dengan df -hperintah bash) ketika saya mengosongkan sebagian kesalahan ini hilang.

Mohammad Reza Esmaeilzadeh
sumber
0

Jika Anda menjalankan Redis secara lokal di mesin windows, coba "jalankan sebagai administrator" dan lihat apakah itu berfungsi. Dengan saya, masalahnya adalah bahwa Redis terletak di folder "Program Files", yang membatasi izin secara default. Seperti seharusnya.

Namun, jangan menjalankan Redis secara otomatis sebagai administrator. Anda tidak ingin memberinya lebih banyak hak yang seharusnya dimiliki Redis . Anda ingin menyelesaikan ini dengan buku.

Jadi, kami dapat dengan cepat mengidentifikasi masalah dengan menjalankannya sebagai administrator, tetapi ini bukan obatnya. Skenario yang mungkin terjadi adalah Anda telah meletakkan Redis di folder yang tidak memiliki hak tulis dan akibatnya file DB disimpan di lokasi yang sama.

Anda dapat menyelesaikan ini dengan membuka redis.windows.confdan untuk mencari konfigurasi berikut:

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

Ubah dir ./jalur yang Anda miliki izin baca / tulisnya secara teratur

Anda juga bisa memindahkan folder Redis secara keseluruhan ke folder yang Anda tahu memiliki izin yang tepat.

Pascalculator
sumber
0

Bagi saya itu hanya masalah izin pada folder data redis persisten. Saya memberikannya:

chmod 777 -Rf data/

Dan itu berhasil! Mungkin terlalu dini untuk mengatakan itu menyelesaikan masalah. Karena saya juga curiga redis tidak dieksekusi sebagai root, jadi saya perlu memeriksa dockerFile saya untuk mencari tahu lebih lanjut.

macherif
sumber
0

Periksa log Redis Anda sebelum mengambil tindakan apa pun. Beberapa solusi di utas ini dapat menghapus data Redis Anda, jadi berhati-hatilah dengan apa yang Anda lakukan.

Dalam kasus saya, mesin kehabisan RAM . Ini juga bisa terjadi ketika tidak ada lagi ruang disk kosong di host.

Erfun
sumber
0

Perlu diketahui, bahwa kesalahan ini muncul ketika server Anda sedang diserang. Baru saja ditemukan bahwa redis gagal menulis ke '/etc/cron.d/web' di mana setelah mengoreksi izin, file baru yang terdiri dari algoritma penambangan dengan beberapa opsi persembunyian ditambahkan.

qzaki
sumber
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
penggemar youwei
sumber
-1

Seperti yang ditunjukkan oleh @Chris masalahnya kemungkinan memori rendah. Kami mulai mengalaminya ketika kami mengalokasikan terlalu banyak RAM ke MySQL ( innodb_buffer_pool_size).

Untuk memastikan ada cukup RAM untuk Redis dan layanan lain kami mengurangi innodb_buffer_pool_sizeMySQL.

Mugoma J. Okomba
sumber
-1

Dalam kasus saya, alasannya adalah ruang kosong yang sangat rendah di disk (hanya 35 Mb). Saya melakukan yang berikut -

  1. Menghentikan semua proses terkait Redis
  2. Hapus beberapa file dalam disk untuk membuat ruang kosong yang memadai
  3. Hapus file redis dump (jika data yang ada tidak diperlukan)

    sudo rm /var/lib/redis/*

  4. Hapus semua kunci dari semua database yang ada

    sudo redis-cli flushall

  5. restart semua tugas seledri dan periksa log terkait untuk masalah apa pun
rajarshig
sumber
1
Anda harus melakukan ini pada contoh dev Anda. Bukan solusi yang tepat ketika berhadapan dengan aplikasi data centric.
Nikesh Devaki
-1

Anda harus chmod dan menemukan folder baru

chown -R redis dan chmod ...

Mohamed-yassine Belatar
sumber