redis突然の停電によるaofファイル破損修復の一例
会社のいくつかのサーバーは突然ダウンタイムして、振り回された後、redisが開いていないことを発見して、サーバーに行ってredisを起動して、その中の1台はaofファイルloadをメモリに入れる時、中断して、いつも開くことができません!
現象は、loadがしばらくすると、redisプロセスが自動的に閉じます!
ログ・ファイルを表示すると、次のような内容が表示されます.
aofファイルが破損していることがわかりました.
redisデータディレクトリを削除し、aofファイルをバックアップし、redis-check-aofツールで修復します.
再起動、redis起動完了を発見!
生産に投入し、正常に使用します!
現象は、loadがしばらくすると、redisプロセスが自動的に閉じます!
ログ・ファイルを表示すると、次のような内容が表示されます.
[2716] 28 Apr 10:16:51.234 # Server started, Redis version 2.8.8
[2716] 28 Apr 10:16:51.234 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
[2716] 28 Apr 10:17:27.915 # Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix
[2761] 28 Apr 10:19:40.866 * Increased maximum number of open files to 10032 (it was originally set to 1024).
aofファイルが破損していることがわかりました.
redisデータディレクトリを削除し、aofファイルをバックアップし、redis-check-aofツールで修復します.
[root@db redis]# cp appendonly.aof appendonly.aof.bak
[root@db redis]# redis-check-aof --fix appendonly.aof
0x c93488e5: Expected prefix '
AOF analyzed: size=3375772775, ok_up_to=3375663333, diff=109442
This will shrink the AOF from 3375772775 bytes, with 109442 bytes, to 3375663333 bytes
Continue? [y/N]: y
Successfully truncated AOF
再起動、redis起動完了を発見!
生産に投入し、正常に使用します!