關於 5月10號 資料丟失問題反饋

沈益飛發表於2019-05-15

整個異常持續時間從 5月10日 10點開始到10點17分,一共持續了17分鐘,檢查日誌主要是【強制關閉Redis快照導致不能持久化】 導致的。程式上面出現以下日誌。

第一個

ERR Error running script (call to f_a08c9c69b7c07ae2485190873b90d128a23e502d): @user_script:1: @user_script: 1: -MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

第二個

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

參考網上的解決方案:https://segmentfault.com/q/101000001635782...

我先使用命令列解決了打不開的問題。

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

事後網上查了一下,這個錯誤資訊是Redis客戶端工具在儲存資料時候丟擲的異常資訊,很多人都是建議config set stop-writes-on-bgsave-error no。這樣做其實是不好的,這僅僅是讓程式忽略了這個異常,使得程式能夠繼續往下執行,但實際上資料還是會儲存到硬碟失敗!

參考:http://www.cnblogs.com/qq78292959/p/399434...

發現是因為記憶體設定問題。後來才發現本地的 redis 沒有使用配置檔案啟動。

當時處理的時候發現記憶體還有很多,但是就是寫入磁碟失敗了。

Redis在儲存資料到硬碟時為了避免主程式假死,需要Fork一份主程式,然後在Fork程式內完成資料儲存到硬碟的操作,如果主程式使用了4GB的記憶體,Fork子程式的時候需要額外的4GB,此時記憶體就不夠了,Fork失敗,進而資料儲存硬碟也失敗了。

所以商家設定項的資料就存在了記憶體裡面,沒有寫入到硬碟中。

晚上的時間遷移 redis 到雲上面,需要重啟 redis,重啟前沒有備份 redis 資料,導致重啟後丟失了很多 key,導致商戶設定項的資料丟失了。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章