Скажите вам не перезапускать Redis случайно! ! ! Как насчет того, что все данные потеряны~~~

Redis задняя часть

Это 10-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

содержание

Вот в чем дело...

Два режима сохранения данных Redis

1. Режим РБД

2. Режим АОФ

3. Связь между RDB и AOF

В-четвертых, проблема ретроспективного анализа

Итак, как включить режим инкрементного резервного копирования AOF?

Решение:

1. Войдите в Redis

2. Измените переключатель AOF онлайн.

3. Просмотр данных

Вот в чем дело...

Сегодня программа, которая работала хорошо, внезапно зависла, и я спросил коллегу, который отвечает за обслуживание Redis. Коллеги рассказали, что по требованиям руководителей модифицировали режим резервного копирования Redis, а также включили режим инкрементного резервного копирования AOF (AppendOnlyFile).

Я запаниковал, когда услышал это. . .

Спросите его: "Вы изменили файл конфигурации? Тогда... перезагрузитесь?!?!"

Коллега сказал "да"

Он также сказал: «Режим RDB включен по умолчанию, а полное резервное копирование всегда включено. Чего вы боитесь?»

После его прослушивания через мое сердце прошло 10 000 альпак. . .

эммм~~~~ Почему перезагрузка создает такой большой беспорядок?

Мое сердце было разбито в то время~~~

Но я все же сдержался и рассказал ему о двух режимах локализации данных Redis.

Два режима сохранения данных Redis

1. Режим РБД

1. Режим локализации включен по умолчанию в Redis.

2. Полное резервное копирование через регулярные промежутки времени, при этом система создает резервную копию экспортированного файла dump.rdb.

save 900 1   #900秒内 至少1个key 被更新 就全量备份RDB
save 300 10
save 60 10000

3. Принцип: Redis создаст новый процесс для полного структурирования rdb. (Сам Redis читает и пишет в одном процессе)

4. Недостатки: потеря данных после резервного копирования и между сбоями, дочерний процесс нового форка будет копировать данные памяти в родительском процессе для резервного копирования, что приведет к мгновенному удвоению памяти.

2. Режим АОФ

1. Аббревиатура AppendOnlyFile — это режим инкрементного резервного копирования, а Redis по умолчанию не включен.

2. Подобно binlog базы данных mysql, записывает все записи операций Redis.

appendonly yes #开启AOF
appendfilename "appendonly.aof" #设置备份文件名
appendfsync	everysec #每秒更新一次操作记录

3. Redis повторно разветвит дочерний процесс для записи на основе исходного процесса.

4. Запишите операцию записи в виде журнала, запишите ее в виде добавления файла (добавьте запись операции в тот же файл резервной копии)

3. Связь между RDB и AOF

1. Приоритет AOF>RDB

2. RDB и AOF не будут взаимодействовать друг с другом

В-четвертых, проблема ретроспективного анализа

Коллеги открывают AOF после изменения конфигурационного файла

#开启AOF
appendonly yes

перезапустил redis --server

redis-server redis.conf

AOF вступает в силу только после перезапуска Redis.

После перезапуска Redis сначала загружает файл резервной копии AOF (поскольку переключатель AOF включен), но AOF пуст, и вся память Redis загружается как пустая.

В настоящее время, как только условия для полного резервного копирования RDB будут инициированы или удовлетворены, Redis выполнит полное резервное копирование всей базы данных в памяти и перезапишет исходный файл резервной копии.

НО В это время память Redis пуста.После завершения RDB полная резервная копия пустой библиотеки памяти перезапишет исходный файл резервной копии RDB.

Следовательно, память пуста, в AOF ничего нет, и предыдущий файл резервной копии RDB также перезаписывается. . .

Идеально гладкое, не оставляющее следов техническое средство для удаления библиотеки

Я просто хотел преклонить колени перед этим большим парнем.

эммм... Подводя итог, после волны операций AOF после перезагрузки занял память, а память полностью покрыла RDB, которая была полностью заархивирована перед перезагрузкой, и данные все пропали.

Наконец, к счастью, файл резервной копии RDB для redis создается раз в день, но данные из последнего резервного копирования до перезапуска все равно не могут быть восстановлены.

-----------------End Of The Story----------------

Итак, как включить режим инкрементного резервного копирования AOF?

Решение:

Изменить переключатель AOF онлайн

Не перезапускайте Redis! ! ! Поскольку перезапуск потребует перезагрузки памяти Redis.

1. Войдите в Redis

#链接到redis
[root@mail ~]# redis-cli -a 123456[你的密码] -p 6379

2. Измените переключатель AOF онлайн.

#redis中查看AOF状态
127.0.0.1:7001> config get appendonly
1) "appendonly"
2) "no"

#在线设置AOF开关为yes
127.0.0.1:7001> config set appendonly yes
OK
127.0.0.1:7001> 

3. Просмотр данных

#数据都在
127.0.0.1:7001> keys *
1) "name"
2) "gender"
3) "age"
127.0.0.1:7001> 

И файлы бэкапа AOF и RDB тоже нормально сохраняются