Резервное копирование — это одна из главных задач при работе с базами данных, и Redis не исключение. Потеря данных из-за сбоев или ошибок может привести к серьезным проблемам. В этой статье разберем, как правильно создавать резервные копии в Redis на примере Ubuntu 24.04, чтобы ваши данные всегда были под защитой.
Решения Рег.облака обеспечивают надежное хранение данных, гибкое масштабирование и контроль затрат. Вы получаете готовую инфраструктуру для работы с базами данных и резервными копиями, а команда может сосредоточиться на развитии продукта.
Что нужно знать перед резервным копированием в Redis
Redis предлагает два основных способа хранения данных: RDB-снимки (Redis Database) и AOF-логи (Append Only File).
RDB-снимки позволяют создавать полные точечные копии всех данных в заданные моменты времени. Их удобно делать для быстрого восстановления большого объема информации, но при конфликте между двумя снимками часть новых данных может быть утеряна.
AOF-логи записывают каждую команду изменения данных, благодаря чему можно восстановить состояние базы вплоть до последней операции. Этот способ позволяет минимизировать потери, но требует больше места и может быть медленнее при восстановлении больших массивов данных.
Для максимальной надежности Redis поддерживает гибридный режим, в котором одновременно используются оба подхода: RDB-снимки создают базовый слой резервных данных, а AOF-логи записывают все изменения между снимками.
Если вы планируете использовать Redis в критически важных или нагруженных проектах, рекомендуем размещать БД на выделенном VPS или dedicated-сервере с быстрыми NVMe-дисками.
Также перед настройкой резервного копирования стоит учесть частоту создания резервных копий, требования к хранению (объем и место размещения файлов), а также продумать стратегию восстановления: где будут храниться резервные копии, как часто тестируется восстановление и насколько быстро вы сможете вернуть систему к работе в случае сбоя.

Как настроить RDB-снимки
Настройка RDB-снимков позволяет регулярно сохранять текущее состояние данных и в случае сбоя быстро восстановить работу сервиса.
Важно понимать: RDB-снимки не фиксируют абсолютно каждое изменение, а сохраняют базу с определенной периодичностью — в зависимости от выбранных условий. Поэтому при восстановлении возможно потерять данные, внесенные между снимками.
1. Откройте основной конфигурационный файл Redis:
|
1 |
sudo nano /etc/redis/redis.conf |
2. В нем укажите новые параметры, которые будут отвечать за частоту создания снимков.
Например:
|
1 2 3 |
save 1800 2 # Сохранить снимок, если изменились хотя бы 2 ключа за 30 минут save 600 50 # Сохранить снимок, если изменились 50 ключей за 10 минут save 120 5000 # Сохранить снимок, если изменились 5000 ключей за 2 минуты |
Заданные параметры определяют частоту резервного копирования и позволяют подобрать оптимальный баланс между производительностью и надежностью.
3. Укажите место и имя файла снимка:
|
1 2 |
dbfilename redis_backup.rdb dir /opt/redis/backups/ |
Важно! Убедитесь, что каталог /opt/redis/backups/ существует и доступен для записи процессу Redis.
4. Включите сжатие и проверку целостности файла:
|
1 2 |
rdbcompression yes # Использовать сжатие RDB-файла rdbchecksum yes # Проверять целостность при сохранении и восстановлении |
5. После редактирования конфигурации выполните:
|
1 2 |
sudo systemctl restart redis sudo systemctl status redis |

Как настроить AOF-логирование
AOF (Append Only File) — это способ резервного копирования, при котором Redis записывает каждую команду изменения данных в отдельный файл. Благодаря ему можно восстановить базу практически до любого момента — вплоть до последней успешной операции.
AOF особенно полезен, если для вас критична минимальная потеря данных. В отличие от RDB-снимков, он позволяет сохранять все изменения, но и файлы получаются больше, и восстановление может занять больше времени.
1. Для начала откройте файл конфигурации Redis:
|
1 |
sudo nano /etc/redis/redis.conf |
2. Далее включите AOF и задайте имя файла, в который будут сохраняться команды:
|
1 2 |
appendonly yes appendfilename "redis-log.aof" |
Где:
- appendonly yes — включает режим логирования.
- appendfilename "redis-log.aof" — имя файла, который будет использоваться для хранения команд.
3. Частота записи команд на диск задается параметром appendfsync. Он определяет, насколько быстро данные из журнала AOF будут сохраняться на жесткий диск.
Например:
|
1 |
appendfsync everysec |
Возможные значения:
- appendfsync always — запись на диск происходит после каждой команды. Самый безопасный, но и в то же время самый медленный способ.
- appendfsync everysec — запись происходит каждую секунду. Мы рекомендуем использовать его.
- appendfsync no — запись поручается операционной системе — иными словами, Redis сам не контролирует момент записи данных на диск, а отдает файл ОС, и та записывает его тогда, когда сочтет нужным. Это быстрее, но повышает риск потери данных при ошибках.
4. AOF-файл может быстро увеличиваться в размере, поэтому Redis может автоматически переписывать его, чтобы уменьшить размер.
Для этого используются такие параметры:
|
1 2 |
auto-aof-rewrite-percentage 200 auto-aof-rewrite-min-size 128mb |
Где:
- auto-aof-rewrite-percentage 200 — файл будет переписан, если увеличился в 3 раза по сравнению с первоначальным размером.
- auto-aof-rewrite-min-size 64mb — переписывание начнется только, если размер файла стал больше 128 МБ.
Они позволяют не только экономить место, но и ускоряют восстановление данных, потому что в файле будет меньше повторяющихся команд.
5. После внесения изменений в настройки перезапустите Redis, чтобы изменения вступили в силу:
|
1 2 |
sudo systemctl restart redis sudo systemctl status redis |

Как создать резервную копию вручную
Иногда нужно создать резервную копию Redis немедленно — например, перед обновлением или переносом базы данных. С этим вам помогут несколько команд:
- redis-cli SAVE — сразу создает снимок базы, но на время выполнения блокирует все операции записи. Рекомендуется использовать только, если база небольшая и нагрузка невысокая.
- redis-cli BGSAVE — запускает процесс создания снимка на фоне — так, чтобы он не мешал работе сервера. Это более безопасный и быстрый способ для рабочих систем.
- redis-cli BGREWRITEAOF — запускает принудительное сжатие и обновление AOF-журнала без остановки основного процесса.
- redis-cli INFO persistence — показывает, выполняются ли сейчас операции сохранения или переписывания, и какой у них статус. Полезна, чтобы убедиться, что фоновые задачи завершились.
Как автоматизировать резервное копирование Redis
Чтобы каждый раз не создавать резервные копии вручную, можно настроить автоматизацию — пусть бэкапы создаются по расписанию без вашего участия. Это защитит ваш проект от потери данных и сэкономит время.
Один из самых простых и надежных способов — использовать bash-скрипт вместе с cron:
1. Создайте файл, например backup_redis.sh, и добавьте в него следующий код:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#!/bin/bash # backup_redis.sh BACKUP_DIR="/data/backups/redis" DATE=$(date +%Y-%m-%d_%H-%M-%S) REDIS_DIR="/srv/redis" # Создаем папку для резервных копий (если ее еще нет) mkdir -p $BACKUP_DIR # Запускаем фоновое создание RDB-снимка redis-cli BGSAVE # Ожидаем завершения фоновой операции lastsave_before=$(redis-cli LASTSAVE) while true; do lastsave_now=$(redis-cli LASTSAVE) if [ "$lastsave_now" -gt "$lastsave_before" ]; then break fi sleep 1 done # Копируем свежий RDB-файл cp $REDIS_DIR/dump.rdb $BACKUP_DIR/dump_$DATE.rdb # Копируем AOF-файл, если он используется if [ -f $REDIS_DIR/myredis.aof ]; then cp $REDIS_DIR/myredis.aof $BACKUP_DIR/myredis_$DATE.aof fi # Архивируем резервные файлы cd $BACKUP_DIR tar -czf redis_backup_$DATE.tar.gz dump_$DATE.rdb myredis_$DATE.aof 2>/dev/null # Удаляем временные копии после упаковки rm -f dump_$DATE.rdb myredis_$DATE.aof # Очищаем старые архивы (старше 5 дней) find $BACKUP_DIR -name "redis_backup_*.tar.gz" -mtime +5 -delete echo "Backup completed: redis_backup_$DATE.tar.gz" |
Где:
- BACKUP_DIR — путь к папке, где будут храниться бэкапы. Можно указать свою директорию, например /home/backup/redis.
- REDIS_DIR — путь к директории, где Redis хранит свои файлы (например, dump.rdb и redis-log.aof).
- redis-log.aof — имя журнала AOF.
- 5 дней — срок хранения архивов. Если хотите дольше хранить бэкапы, измените значение в параметре -mtime +5 на нужное количество дней.
2. В терминале выполните:
|
1 |
chmod +x backup_redis.sh |
3. Чтобы бэкапы создавались автоматически, откройте crontab для пользователя root:
|
1 |
sudo crontab -e |
4. Добавьте строку, чтобы запускать скрипт каждые 4 часа:
|
1 |
0 */4 * * * /path/to/backup_redis.sh |
Где /path/to/backup_redis.sh — полный путь к вашему скрипту.

Как восстановить данные Redis из резервной копии
Восстановление данных Redis из резервной копии зависит от того, какой тип бэкапа вы используете — RDB или AOF.
Важно! На время восстановления сервер Redis должен быть остановлен, чтобы избежать конфликтов и потери данных:
1. Остановите Redis:
|
1 |
sudo systemctl stop redis |
2. Если вы делали резервную копию с помощью RDB-снимка, скопируйте нужный файл в рабочую директорию Redis:
|
1 2 |
sudo cp /backup/redis/dump.rdb /var/lib/redis/ sudo chown redis:redis /var/lib/redis/dump.rdb |
3. Если используете AOF-журнал, скопируйте ваш файл (в нашем случае — redis-log.aof):
|
1 2 |
sudo cp /backup/redis/redis-log.aof /var/lib/redis/ sudo chown redis:redis /var/lib/redis/redis-log.aof |
4. Запустите Redis
|
1 |
sudo systemctl start redis |
5. Проверьте восстановление. Посмотрите статистику ключей и убедитесь, что данные на месте:
|
1 |
redis-cli INFO keyspace |
В Redis все данные — это ключи (например, user:123, session:456, product:789). Каждый ключ связан с каким-то значением: строкой, списком, хешем и так далее. А команда выше показывает, сколько всего ключей есть в каждой базе Redis.
Например:
db0:keys=150,expires=2,avg_ttl=60000
означает, что в базе данных 0 сейчас хранится 150 ключей (150 разных записей или объектов).
То есть, если число ключей совпадает с тем, что было до сбоя, она дает понять, что ваши данные восстановились. Если ключей нет — значит, восстановление не удалось или база пуста.
Заключение
Резервное копирование в Redis — не такая уж сложная задача, если разобраться с основными механизмами и подобрать удобный для себя способ. Выше мы рассмотрели, как работают RDB-снимки и AOF-логи, как их настраивать, создавать резервные копии и автоматизировать этот процесс.
Не забывайте регулярно делать копии и время от времени проверять их работоспособность. Это сэкономит вам время, нервы и убережет от неприятных сюрпризов, если что-то вдруг пойдет не так.