Memcached 備份、還原的方式

理論上, Memcached 不需要做備份、還原這種事情, 因為存在裡面的東西應該都是 Cache, 沒有使用 Memcached 的話, 速度應該只會比較慢, 而不應該會有影響才對.

  • 註1: Memcached restart 後, 所有資料都會清空
  • 註2: 這次遇到的主要是實驗用的項目, 剛好要搬機器, 實驗不想中斷, 所以才用此方式

Memcached 備份、還原的方式

先看 Memcached 的限制條件:

一般 Memcached 能提供的方式都是 Dump key, 然後自己再寫程式撈出來, 做寫入(ADD)的動作, 這邊有比較簡易的操作方式. (利用 memcached-tool + nc 來達成)

Memcached 備份、還原的步驟

假設要將 192.168.1.1 的 memcached data 備份到 localhost (192.168.1.1. 那台 memcached ip 不能跑 localhost)

  1. wget https://raw.githubusercontent.com/memcached/memcached/master/scripts/memcached-tool
  2. chmod +x ./memcached-tool
  3. ./memcached-tool 192.168.1.1:11211 dump > data # 備份, data 內容大致如下:
    add 19bc2701c3898279jkds1jklc272b35f 0 1413178136 506
    a:3:{s:4:"text";..................}
  4. 註: 1413178136 # timestamp, 若是資料過期, 匯入後找不到
  5. nc localhost 11211 < data # 還原
  6. # 驗證
  7. ./memcached-tool localhost:11211 dump > local-data
  8. wc -l local-data
  9. wc -l data
  10. 看看上述兩個資料筆數是否正確
  11. 上述參考自此篇: memcache dump and load

修改 Memcached 設定檔,需要重新啟動,可以使用下述:

  • ./memcached-tool localhost:11211 dump > data; sudo /etc/init.d/memcached restart; sleep 0.1; nc localhost 11211 < data
  • 註:可以寫到 /dev/shm (要注意記憶體是否足夠) 會更快 ./memcached-tool localhost:11211 dump > /dev/shm/data; sudo /etc/init.d/memcached restart; sleep 0.1; nc localhost 11211 < /dev/shm/data

PHP 版 Memcached backup / restore

另外有 PHP 的 Memcached backup / restore 程式, 可以參考看看(註: 我沒用過)

下述摘錄自此篇: Meabed/memcached-php-backup-restore - Save / Restore data from Memcache to File

  • php m.php -h 127.0.0.1 -p 112112 -op restore
    -h : Memcache Host address ( default is 127.0.0.1 )
    -p : Memcache Port ( default is 11211 )
    -p : Operation is required !! ( available options is : restore , backup )
  • php m.php -h 127.0.0.1 -p 112112 -op backup
  • php m.php -h 127.0.0.1 -p 112112 -op restore

其它 Memcached 相關工具

Memcached 有其它方便使用的工具, 可以嘗試看看.

sudo apt-get install libmemcached-tools # 下述取自: Welcome to the libmemcached documentation

  • memcapable - Checking a Memcached server capibilities and compatibility
  • memcat - "cat" data from a server
  • memcp - Copy data to a server
  • memdump - Dumping your server
  • memerror - translate an error code to a string
  • memflush - flush all data from a server
  • memrm - Remove data from a server
  • memslap - Load testing and benchmarking a server
  • memaslap - Load testing and benchmarking a server
  • memstat - Gather statistics from a server
  • memexist - Check for the existance of a key
  • memparse - Parse an option string
  • memping - Test to see if a server is available.
  • memtouch - Touches a key.
  • ex: memccat --servers=127.0.0.1

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈Memcached 備份、還原的方式〉中有 5 則留言

  1. 過期時間最多設定30天 <--- 請問, 我記得若不設定過期時間就是永久 cache, 直到被其它 cache 佔用, 而想設定過期時間最多只能設 30 天, 這樣理解是正確的嗎? 謝謝.

  2. 在流量很大的網站, Memcached負責的腳色變的很重要的時候,若Memcached清空,表示當下所有的request都cache miss,需要真正去資料庫撈,有時候資料庫沒辦法承受這麼大的負載,網站就掛掉了.... 變成沒有cache不是比較慢,而是系統就承受不了而crash了...

    1. 這種狀況遇到不少阿, 所以這種除了 Memcached 外, 應該要多一層防範~ 或者改用其它更穩定的 Cache 機制(寫到檔案去, 而不是 Memory), 速度可能沒辦法這麼快, 但是堪用即可.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料