Cách backup và khôi phục dữ liệu Redis của bạn trên Ubuntu 14.04
Redis là bộ nhớ đệm trong bộ nhớ, key-value và lưu trữ (tức là database ) cũng có thể được duy trì (lưu vĩnh viễn) vào đĩa. Trong bài viết này, bạn sẽ đọc cách backup database Redis trên server Ubuntu 14.04. Dữ liệu Redis, theo mặc định, được lưu vào đĩa trong file  .rdb , đây là ảnh chụp nhanh tại thời điểm của tập dữ liệu Redis của bạn. Ảnh chụp nhanh được thực hiện theo các khoảng thời gian xác định, và vì vậy rất hoàn hảo cho các bản  backup  của bạn.
Yêu cầu
Để hoàn thành các bước trong hướng dẫn này, bạn cần:
- Server Ubuntu 14.04
- Cài đặt Redis. Bạn có thể theo dõi những cài đặt tổng thể từ Redis cài đặt hướng dẫn này (mặc dù nó sẽ chỉ làm việc cũng với một cụm master-slave)
- Đảm bảo rằng server Redis của bạn đang chạy
-  Nếu bạn đã đặt password  Redis, thì bạn nên sử dụng nó. Mật khẩu nằm trong file  cấu hình Redis - /etc/redis/redis.conf
Bước 1 - Định vị Thư mục Dữ liệu Redis
Redis lưu trữ dữ liệu của nó trong một folder trên server của bạn, đó là những gì ta muốn backup . Đầu tiên ta cần biết nó ở đâu.
 Trong Ubuntu và các bản phân phối Linux khác, folder  database  Redis là /var/lib/redis . Nhưng nếu bạn đang quản lý một  server  mà bạn kế thừa và vị trí dữ liệu Redis đã bị thay đổi, bạn có thể xác định vị trí của nó  bằng lệnh :
- sudo locate *rdb 
Ngoài ra, bạn cũng có thể tìm thấy nó từ dấu nhắc redis-cli . Để làm điều đó, hãy nhập:
- redis-cli 
Nếu server Redis không chạy, phản hồi sẽ là:
Could not connect to Redis at 127.0.0.1:6379: Connection refused not connected> Trong trường hợp đó, hãy khởi động Redis và kết nối lại bằng các lệnh sau:
- sudo service redis-server start 
-  
- redis-cli 
Dấu nhắc shell bây giờ sẽ thay đổi thành:
127.0.0.1:6379> Trong khi kết nối với Redis, hai lệnh tiếp theo sẽ xác thực nó và lấy folder dữ liệu:
- auth insert-redis-password-here 
-  
- config get dir 
Đầu ra của lệnh cuối cùng phải là folder dữ liệu Redis của bạn:
1) "dir" 2) "/var/lib/redis" Ghi lại folder Redis của bạn. Nếu nó khác với folder được hiển thị, hãy đảm bảo bạn sử dụng folder này trong suốt hướng dẫn.
Bạn có thể thoát khỏi giao diện dòng lệnh của database ngay bây giờ:
- exit 
Kiểm tra xem đây có phải là folder chính xác không:
- ls /var/lib/redis 
Bạn sẽ thấy một file  dump.rdb . Đó là dữ liệu của Redis. Nếu appendonly cũng được bật, bạn cũng sẽ thấy một appendonly.aof hoặc một file  .aof khác, chứa log  của tất cả các hoạt động ghi mà  server  nhận được.
 Xem bài đăng này về tính bền bỉ của Redis để thảo luận về sự khác biệt giữa hai file  này. Về cơ bản, file  .rdb là ảnh chụp nhanh hiện tại và file  .aof lưu giữ lịch sử Redis của bạn. Cả hai đều đáng để  backup .
  Ta  sẽ bắt đầu chỉ với file  .rdb và kết thúc bằng bản  backup  tự động của cả hai file .
(Tùy chọn) Bước 2 - Thêm dữ liệu mẫu
Trong phần này, bạn có thể tạo một số dữ liệu mẫu để lưu trữ trong database Redis của bạn . Nếu bạn đã có dữ liệu trên server của bạn , bạn chỉ có thể backup nội dung hiện có của bạn .
Đăng nhập vào giao diện dòng lệnh của database :
- redis-cli 
Xác thực:
- auth insert-redis-password-here 
Hãy thêm một số dữ liệu mẫu. Bạn sẽ nhận được phản hồi là OK sau mỗi bước.
- SET shapes:triangles "3 sides" 
-  
- SET shapes:squares "4 sides" 
Xác nhận dữ liệu đã được thêm vào.
- GET shapes:triangles 
-  
- GET shapes:squares 
Đầu ra được bao gồm bên dưới:
"3 sides"  "4 sides" Để  commit  những thay đổi này vào file  /var/lib/redis/dump.rdb , hãy lưu chúng:
- save 
Bạn có thể thoát:
- exit 
Nếu muốn, bạn có thể kiểm tra nội dung của file kết xuất ngay bây giờ. Nó phải có dữ liệu , mặc dù ở dạng thân thiện với máy:
- sudo cat /var/lib/redis/dump.rdb 
REDIS0006?shapes:squares4 sidesshapes:triangles3 sides??o????C Bước 3 - Backup dữ liệu Redis
Đến đây bạn đã biết dữ liệu Redis của bạn nằm ở đâu, đã đến lúc thực hiện backup . Từ trang web chính thức của Redis có trích dẫn này:
Redis rất thân thiện với việc backup dữ liệu vì bạn có thể sao chép các file RDB trong khi database đang chạy: RDB không bao giờ được sửa đổi sau khi được tạo ra và trong khi được production , nó sử dụng tên tạm thời và được đổi tên thành đích cuối cùng chỉ bằng cách sử dụng đổi tên (2) khi ảnh chụp nhanh mới hoàn tất.
Vì vậy, bạn có thể backup hoặc sao chép file database trong khi server Redis đang chạy. Giả sử rằng bạn đang backup nó vào một folder trong folder chính của bạn , việc thực hiện backup đó đơn giản như gõ:
- sudo cp /var/lib/redis/dump.rdb /home/sammy/redis-backup-001 
Redis lưu nội dung ở đây theo định kỳ , nghĩa là bạn không được đảm bảo backup cập nhật từng phút nếu lệnh trên là tất cả những gì bạn chạy. Bạn cần lưu dữ liệu của bạn trước.
Tuy nhiên, nếu có thể chấp nhận được một lượng nhỏ dữ liệu bị mất, chỉ cần backup một file này sẽ hoạt động.
Lưu trạng thái database
 Để có được một bản sao dữ liệu Redis gần đây hơn, cách tốt hơn là truy cập redis-cli , dòng lệnh Redis.
Xác thực như được giải thích trong Bước 1.
 Sau đó, ra lệnh save như sau:
- save 
Đầu ra phải giống như sau :
OK (1.08s) Thoát khỏi database .
  Đến đây bạn  có thể chạy lệnh cp được đưa ra ở trên, tin rằng bản  backup  của bạn đã được cập nhật đầy đủ.
 Mặc dù lệnh cp sẽ cung cấp bản  backup  database  một lần, giải pháp tốt nhất là  cài đặt  cron job sẽ tự động hóa quy trình và sử dụng công cụ có thể thực hiện cập nhật gia tăng và nếu cần, khôi phục dữ liệu.
Bước 4 - Cấu hình Cập nhật tự động với rdiff-backup và Cron
Trong phần này, ta sẽ cấu hình một bản backup tự động backup toàn bộ folder dữ liệu Redis của bạn, bao gồm cả hai file dữ liệu.
 Có một số công cụ  backup  tự động có sẵn. Trong hướng dẫn này,  ta  sẽ sử dụng một công cụ mới hơn, thân thiện với  user  được gọi là rdiff-backup .
 rdiff-backup một công cụ  backup  dòng lệnh. Có khả năng rdiff-backup chưa được cài đặt trên  server  của bạn, vì vậy trước tiên bạn sẽ phải cài đặt nó:
- sudo apt-get install -y rdiff-backup 
Bây giờ nó đã được cài đặt, bạn có thể kiểm tra nó bằng cách  backup  dữ liệu Redis của bạn vào một folder  trong folder  chính của bạn. Trong ví dụ này,  ta   giả định  folder  chính của bạn là /home/ sammy :
Lưu ý folder đích sẽ được tạo bởi script nếu nó không tồn tại. Nói cách khác, bạn không cần phải tự tạo ra nó.
Với –preserve-number-id , quyền sở hữu của các folder nguồn và đích sẽ giống nhau.
- sudo rdiff-backup --preserve-numerical-ids /var/lib/redis /home/sammy/redis 
Giống như lệnh cp trước đó, đây là bản  backup  một lần. Điều thay đổi là  ta  đang  backup  toàn bộ folder  /var/lib/redis và sử dụng rdiff-backup .
Bây giờ ta sẽ tự động hóa backup bằng cron, để backup diễn ra tại một thời điểm nhất định. Để thực hiện điều đó, hãy mở crontab hệ thống:
- sudo crontab -e 
(Nếu bạn chưa sử dụng crontab trước đây trên server này, hãy chọn editor yêu thích của bạn tại dấu nhắc.)
Ở cuối filek, hãy thêm mục nhập được hiển thị bên dưới.
0 0 * * * rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis Mục nhập Cron này sẽ thực hiện  backup  Redis hàng ngày vào lúc nửa đêm.  Lựa chọn  –no-file- file_statistics sẽ vô hiệu hóa việc ghi vào tệp thống kê file  trong folder  rdiff-backup-data , điều này sẽ làm cho rdiff-backup chạy nhanh hơn và sử dụng ít dung lượng đĩa hơn một chút.
Ngoài ra, bạn có thể sử dụng mục này để backup hàng ngày:
- @daily rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis 
Để biết thêm về Cron nói chung, hãy đọc bài viết này về Cron .
Như hiện tại, bản backup sẽ được thực hiện mỗi ngày một lần, vì vậy bạn có thể quay lại vào ngày mai để kiểm tra lần cuối. Hoặc, bạn có thể tạm thời tăng tần suất backup đảm bảo rằng nó đang hoạt động.
Bởi vì các file được sở hữu bởi user hệ thống redis , bạn có thể xác minh chúng đang có sẵn bằng cách sử dụng lệnh này. (Đảm bảo bạn đợi cho đến khi bản backup thực sự được kích hoạt):
- ls -l /home/sammy/redis 
Đầu ra của bạn sẽ giống như sau:
total 20 -rw-rw---- 1 redis redis    70 Sep 14 13:13 dump.rdb drwx------ 3 root  root  12288 Sep 14 13:49 rdiff-backup-data -rw-r----- 1 redis redis   119 Sep 14 13:09 redis-staging-ao.aof Như vậy, bạn sẽ có bản backup hàng ngày dữ liệu Redis của bạn , được lưu trữ trong folder chính của bạn trên cùng một server .
Bước 5 - Khôi phục database Redis từ bản backup
  Đến đây bạn  đã thấy cách  backup  database  Redis, bước này sẽ hướng dẫn bạn cách khôi phục database   của bạn  từ file   backup  dump.rdb .
Khôi phục bản backup yêu cầu bạn thay thế file database Redis đang hoạt động bằng file khôi phục. Vì điều này có khả năng phá hủy, ta khuyên bạn nên khôi phục về server Redis mới nếu có thể.
Bạn sẽ không muốn overrides database trực tiếp của bạn bằng một quá trình khôi phục có vấn đề hơn. Tuy nhiên, đổi tên thay vì xóa file hiện tại sẽ giảm thiểu rủi ro ngay cả khi khôi phục về cùng một server , đó là chiến thuật mà hướng dẫn này chỉ ra.
Kiểm tra nội dung file khôi phục
 Trước tiên, hãy kiểm tra nội dung của file  dump.rdb của bạn. Đảm bảo rằng nó có dữ liệu bạn muốn.
Bạn có thể kiểm tra nội dung của file kết xuất trực tiếp, mặc dù hãy nhớ rằng nó sử dụng định dạng thân thiện với Redis hơn là thân thiện với con người:
- sudo cat /home/gilly/redis/dump.rdb 
Đây là một database nhỏ; kết quả của bạn sẽ giống như sau:
REDIS0006?shapes:triangles3 sidesshapes:squares4 sides??!^?\?,? Nếu bản backup mới nhất của bạn không có dữ liệu, bạn không nên tiếp tục khôi phục. Nếu nội dung ở đó, hãy tiếp tục.
Tùy chọn: Mô phỏng mất dữ liệu
Hãy mô phỏng việc mất dữ liệu, đó sẽ là lý do để khôi phục từ bản backup của bạn.
Đăng nhập vào Redis:
- redis-cli 
Trong chuỗi lệnh này,  ta  sẽ ủy quyền với Redis và xóa mục nhập shapes:triangles :
- auth insert-redis-password-here 
-  
- DEL shapes:triangles 
Bây giờ, hãy đảm bảo mục nhập đã bị xóa:
- GET shapes:triangles 
Đầu ra phải là:
(nil) Lưu và thoát:
- save 
-  
- exit 
Tùy chọn: Cài đặt server Redis mới
Bây giờ, nếu bạn định khôi phục lại server Redis mới, hãy đảm bảo server Redis mới đang hoạt động.
Vì mục đích của hướng dẫn này, ta sẽ chỉ làm theo Bước 1 của hướng dẫn Redis Cluster này , mặc dù bạn có thể theo dõi toàn bộ bài viết nếu bạn muốn cài đặt phức tạp hơn.
Nếu bạn làm theo Bước 2 , nơi bạn thêm password và bật AOF, hãy đảm bảo bạn tính đến điều đó trong quá trình khôi phục.
 Khi bạn đã  xác minh  Redis đã hoạt động trên  server  mới bằng cách chạy redis-benchmark -q -n 1000 -c 10 -P 5 , bạn có thể tiếp tục.
Đang dừng Redis
Trước khi có thể thay thế file kết xuất Redis, ta cần dừng version Redis hiện đang chạy. Cơ sở dữ liệu sẽ offline khi bạn dừng Redis.
sudo service redis-server stop Đầu ra phải là:
Stopping redis-server: redis-server Kiểm tra xem nó đã thực sự dừng chưa:
sudo service redis-server status redis-server is not running Tiếp theo, ta sẽ đổi tên file database hiện tại.
Đổi tên hiện tại dump.rdb
 Redis đọc nội dung của nó từ file  dump.rdb . Hãy đổi tên hiện tại để mở đường cho file  khôi phục của  ta .
sudo mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.old  Lưu ý  bạn có thể khôi phục dump.rdb.old nếu bạn quyết định version  hiện tại tốt hơn file   backup   của bạn .
Nếu AOF được bật, hãy tắt nó đi
AOF theo dõi mọi thao tác ghi vào database Redis. Tuy nhiên, vì ta đang cố gắng khôi phục từ bản backup tại thời điểm nên ta không muốn Redis tạo lại các hoạt động được lưu trữ trong file AOF của nó.
Nếu bạn cài đặt server Redis của bạn từ các hướng dẫn trong hướng dẫn Redis Cluster , thì AOF được bật.
 Bạn cũng có thể liệt kê nội dung của folder  /var/lib/redis/ . Nếu bạn thấy file  .aof ở đó, bạn đã bật AOF.
 Hãy đổi tên file  .aof để tạm thời loại bỏ nó. Thao tác này đổi tên mọi file  kết thúc bằng .aof , vì vậy nếu bạn có nhiều file  AOF, bạn nên đổi tên các file  riêng lẻ và KHÔNG chạy lệnh này:
- sudo mv /var/lib/redis/*.aof /var/lib/redis/appendonly.aof.old 
Chỉnh sửa file cấu hình Redis của bạn để tạm thời tắt AOF:
- sudo nano /etc/redis/redis.conf 
Trong phần AOF , hãy tìm chỉ thị appendonly và thay đổi nó từ yes thành no . Điều đó vô hiệu hóa nó:
appendonly no Khôi phục file dump.rdb
 Bây giờ  ta  sẽ sử dụng file  khôi phục  của bạn , file  này sẽ được lưu tại /home/ sammy /redis/dump.rdb nếu bạn đã làm theo các bước trước trong hướng dẫn này.
Nếu bạn đang khôi phục một server mới, bây giờ là lúc tải file từ server backup của bạn lên server mới:
- scp /home/sammy/redis/dump.rdb sammy@your_new_redis_server_ip:/home/sammy/dump.rdb 
Bây giờ, trên  server  khôi phục , có thể là  server  Redis root  hoặc  server  mới, bạn có thể sử dụng cp để sao chép file  vào folder  /var/lib/redis :
- sudo cp -p /home/sammy/redis/dump.rdb /var/lib/redis 
(Nếu bạn đã tải file  lên /home/ sammy /dump.rdb , hãy sử dụng lệnh sudo cp -p /home/ sammy /dump.rdb /var/lib/redis để sao chép file .)
 Ngoài ra, nếu bạn muốn sử dụng rdiff-backup , hãy chạy lệnh hiển thị bên dưới.  Lưu ý  điều này sẽ chỉ hoạt động nếu bạn đang khôi phục từ folder  mà bạn đã  cài đặt  với rdiff-backup ban đầu. Với rdiff-backup , bạn phải chỉ định tên của file  trong folder  đích:
- sudo rdiff-backup -r now /home/sammy/redis/dump.rdb /var/lib/redis/dump.rdb 
Thông tin chi tiết về tùy chọn -r có trên trang web của dự án được đưa ra ở cuối bài viết này.
Đặt quyền cho file dump.rdb
Bạn có thể đã có các quyền chính xác nếu bạn đang khôi phục vào cùng một server mà bạn đã thực hiện backup .
Nếu bạn đã sao chép file backup vào một server mới, bạn có thể sẽ phải cập nhật các quyền đối với file .
 Hãy xem các quyền của file  dump.rdb trong folder  /var/lib/redis/ .
- ls -la /var/lib/redis/ 
Nếu bạn thấy thông tin như thế này:
-rw-r-----  1 sammy sammy   70 Feb 25 15:38 dump.rdb -rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old Bạn cần cập nhật các quyền để file thuộc sở hữu của user và group redis :
- sudo chown redis:redis /var/lib/redis/dump.rdb 
Cập nhật file để group cũng có thể ghi:
- sudo chmod 660 /var/lib/redis/dump.rdb 
Bây giờ hãy liệt kê lại nội dung của folder  /var/lib/redis/ :
- ls -la /var/lib/redis/ 
Bây giờ file  dump.rdb được khôi phục của bạn có các quyền chính xác:
-rw-rw----  1 redis redis   70 Feb 25 15:38 dump.rdb -rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old Nếu daemon  server  Redis của bạn đã chạy trước khi bạn khôi phục file  và bây giờ sẽ không khởi động - nó sẽ hiển thị thông báo như Could not connect to Redis at 127.0.0.1:6379: Connection refused - hãy kiểm tra log  của Redis.
 Nếu bạn thấy một dòng trong log  như Fatal error loading the DB: Permission denied. Exiting. , thì bạn cần kiểm tra các quyền của file  dump.rdb , như được giải thích trong bước này.
Khởi động Redis
Bây giờ ta cần khởi động lại server Redis.
sudo service redis-server start Kiểm tra nội dung database
Hãy xem việc khôi phục có hiệu quả không.
Đăng nhập vào Redis:
- redis-cli 
Kiểm tra các shapes:triangles mục nhập shapes:triangles :
- GET shapes:triangles 
Đầu ra phải là:
"3 sides" Tuyệt quá! Việc khôi phục của ta đã hoạt động.
Lối ra:
- exit 
Nếu bạn không sử dụng AOF, bạn đã hoàn tất! Phiên bản Redis đã khôi phục của bạn sẽ trở lại bình thường.
(Tùy chọn) Bật AOF
Nếu bạn muốn tiếp tục hoặc bắt đầu sử dụng AOF để theo dõi tất cả các lần ghi vào database của bạn , hãy làm theo các hướng dẫn sau. Tệp AOF phải được tạo lại từ dòng lệnh Redis.
Đăng nhập vào Redis:
- redis-cli 
Bật AOF:
- BGREWRITEAOF 
Bạn sẽ nhận được kết quả :
Background append only file rewriting started Chạy lệnh info . Điều này sẽ tạo ra khá nhiều  kết quả :
- info 
Cuộn đến phần Persistence và kiểm tra xem các mục nhập aof trùng với những gì được hiển thị ở đây. Nếu aof_rewrite_in_progress là 0 , thì quá trình tạo lại file AOF đã hoàn tất.
# Persistence  . . .  aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:0 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok Nếu được xác nhận quá trình tạo lại file AOF đã hoàn tất, bây giờ bạn có thể thoát khỏi dòng lệnh Redis:
- exit 
Bạn có thể liệt kê lại các file  trong /var/lib/redis :
- ls /var/lib/redis 
Bạn sẽ thấy lại file  .aof đang .aof , chẳng hạn như appendonly.aof hoặc redis-staging-ao.aof , cùng với file  dump.rdb và các file   backup  khác.
Sau khi điều đó được xác nhận, hãy dừng server Redis:
- sudo service redis-server stop 
Bây giờ, bật lại AOF trong file  redis.conf :
- sudo nano /etc/redis/redis.conf 
Sau đó, bật lại AOF bằng cách thay đổi giá trị của appendonly thành yes :
appendonly yes Khởi động Redis:
- sudo service redis-server start 
Nếu bạn muốn xác minh nội dung của database , chỉ cần chạy qua phần Kiểm tra nội dung database .
Đó là nó! Phiên bản Redis đã khôi phục của bạn sẽ trở lại bình thường.
Kết luận
Backup dữ liệu Redis của bạn theo cách được đưa ra trong bài viết này rất hữu ích khi bạn không ngại backup dữ liệu vào một folder trên cùng một server .
Tất nhiên, cách tiếp cận an toàn nhất là backup vào một máy khác. Bạn có thể khám phá thêm các tùy chọn backup bằng cách đọc bài viết này về các bản backup :
 Bạn có thể sử dụng nhiều phương pháp  backup  này với các file  giống nhau trong folder  /var/lib/redis .
 Hãy theo dõi bài viết trong tương lai của  ta  về việc di chuyển và phục hồi của Redis. Bạn cũng  có thể cần  tham khảo các ví dụ của tài liệu rdiff-backup để biết cách sử dụng rdiff-backup một cách hiệu quả:
Các tin liên quan
Cách thiết lập server Redis làm Trình xử lý phiên cho PHP trên Ubuntu 14.042015-08-21
Cách cấu hình một cụm Redis trên CentOS 7
2015-07-30
Cách cấu hình cụm Redis trên Ubuntu 14.04
2015-07-16
Cách cấu hình bộ đệm Redis để tăng tốc WordPress trên Ubuntu 14.04
2014-12-15
Cách cấu hình giám sát Sensu, RabbitMQ và Redis trên Ubuntu 14.04
2014-09-29
 

