可以看到master_link_status的状态已经是down了,Master已经不可访问了。
而此时,Slave依然运行良好,并且保留有AOF与RDB文件。
下面我们将通过Slave上保存好的AOF与RDB文件来恢复Master上的数据。
首先,将Slave上的同步状态取消,避免主库在未完成数据恢复前就重启,进而直接覆盖掉从库上的数据,导致所有的数据丢失。
redis 127.0.0.1:6379> SLAVEOF NO ONE
OK
确认一下已经没有了master相关的配置信息:
redis 127.0.0.1:6379> INFO
01
redis_version:2.4.17
02
redis_git_sha1:00000000
03
redis_git_dirty:0
04
arch_bits:64
05
multiplexing_api:epoll
06
gcc_version:4.4.5
07
process_id:13003
08
run_id:9b8b398fc63a26d160bf58df90cf437acce1d364
09
uptime_in_seconds:1961
10
uptime_in_days:0
11
lru_clock:654215
12
used_cpu_sys:29.98
13
used_cpu_user:1.22
14
used_cpu_sys_children:1.76
15
used_cpu_user_children:1.42
16
connected_clients:1
17
connected_slaves:0
18
client_longest_output_list:0
19
client_biggest_input_buf:0
20
blocked_clients:0
21
used_memory:33047696
22
used_memory_human:31.52M
23
used_memory_rss:34779136
24
used_memory_peak:33064400
25
used_memory_peak_human:31.53M
26
mem_fragmentation_ratio:1.05
27
mem_allocator:jemalloc-3.0.0
28
loading:0
29
aof_enabled:1
30
changes_since_last_save:0
31
bgsave_in_progress:0
32
last_save_time:1348719252
33
bgrewriteaof_in_progress:0
34
total_connections_received:4
35
total_commands_processed:250311
36
expired_keys:0
37
evicted_keys:0
38
keyspace_hits:0
39
keyspace_misses:0
40
pubsub_channels:0
41
pubsub_patterns:0
42
latest_fork_usec:1119
43
vm_enabled:0
44
role:master
45
aof_current_size:17908619
46
aof_base_size:16787337
47
aof_pending_rewrite:0
48
aof_buffer_length:0
49
aof_pending_bio_fsync:0
50
db1:keys=250000,expires=0
在Slave上复制数据文件:
dongguo@redis-slave:/opt/redis/data/6379$ tar cvf /home/dongguo/data.tar *
appendonly.aof
dump.rdb
将data.tar上传到Master上,尝试恢复数据:
可以看到Master目录下有一个初始化Slave的数据文件,很小,将其删除。
dongguo@redis:/opt/redis/data/6379$ ls -l
total 4
-rw-r--r-- 1 root root 10 Sep 27 00:40 dump.rdb
dongguo@redis:/opt/redis/data/6379$ sudo rm -f dump.rdb
然后解压缩数据文件:
dongguo@redis:/opt/redis/data/6379$ sudo tar xf /home/dongguo/data.tar
dongguo@redis:/opt/redis/data/6379$ ls -lh
total 29M
-rw-r--r-- 1 root root 18M Sep 27 01:22 appendonly.aof
-rw-r--r-- 1 root root 12M Sep 27 01:22 dump.rdb
启动Master上的Redis;
dongguo@redis:/opt/redis/data/6379$ sudo /etc/init.d/redis start
Starting Redis server...
查看数据是否恢复:
redis 127.0.0.1:6379> INFO
01
redis_version:2.4.17
02
redis_git_sha1:00000000
03
redis_git_dirty:0
04
arch_bits:64
05
multiplexing_api:epoll
06
gcc_version:4.4.5
07
process_id:16959
08
run_id:6e5ba6c053583414e75353b283597ea404494926
09
uptime_in_seconds:22
10
uptime_in_days:0
11
lru_clock:650292
12
used_cpu_sys:0.18
13
used_cpu_user:0.20
14
used_cpu_sys_children:0.00
15
used_cpu_user_children:0.00
16
connected_clients:1
17
connected_slaves:0
18
client_longest_output_list:0
19
client_biggest_input_buf:0
20
blocked_clients:0
21
used_memory:33047216
22
used_memory_human:31.52M
23
used_memory_rss:34623488
24
used_memory_peak:33047192
25
used_memory_peak_human:31.52M
26
mem_fragmentation_ratio:1.05
27
mem_allocator:jemalloc-3.0.0
28
loading:0
29
aof_enabled:0
30
changes_since_last_save:0
31
bgsave_in_progress:0
32
last_save_time:1348680180
33
bgrewriteaof_in_progress:0
34
total_connections_received:1
35
total_commands_processed:1
36
expired_keys:0
37
evicted_keys:0
38
keyspace_hits:0
39
keyspace_misses:0
40
pubsub_channels:0
41
pubsub_patterns:0
42
latest_fork_usec:0
43
vm_enabled:0
44
role:master
45
db1:keys=250000,expires=0
可以看到25万条数据已经完整恢复到了Master上。
此时,可以放心的恢复Slave的同步设置了。
redis 127.0.0.1:6379> SLAVEOF 10.6.1.143 6379
OK
查看同步状态:
redis 127.0.0.1:6379> INFO