如何修改 Redis 数据存放路径

Redis 默认数据存放路径一般是 /var/lib/redis,如果你想改为自定义路径(比如 /data/redis),需要注意系统级别的权限、systemd 配置和 Redis 自身配置,否则可能出现无法写入、MISCONF 等问题。下面是完整流程。


一、修改 Redis 配置文件

  1. 打开 Redis 配置文件(以 Ubuntu/Debian 为例):

sudo vim /etc/redis/redis.conf

 

  2.修改 dir 配置项为你的目标目录,例如:

dir /data/redis
  1. 保存退出。

注意:仅修改 redis.conf 并不保证 Redis 可以写入,systemd 的沙箱机制也可能阻止写入。

 

二、确保数据目录权限正确

  1. Redis 需要有写入权限,目录归属应为 redis 用户:

sudo mkdir -p /data/redis
sudo chown redis:redis /data/redis
sudo chmod 750 /data/redis

  2.父目录 /data 应该归 root 并且可访问:

sudo chown root:root /data
sudo chmod 755 /data

 

  3.(可选)如果启用了 SELinux,需要给目录打标签:

sudo semanage fcontext -a -t redis_var_lib_t "/data/redis(/.*)?"
sudo restorecon -Rv /data/redis

 

三、修改 systemd 配置(关键一步)

Redis 默认 systemd 单元对写路径有限制,只允许写 /var/lib/redis。如果目录不在这个列表,即使权限正确,RDB/AOF 也无法落盘。

1. 创建或修改 override 文件(推荐方法)

直接用 vim 编辑:

sudo mkdir -p /etc/systemd/system/redis-server.service.d
sudo vim /etc/systemd/system/redis-server.service.d/override.conf

 

在文件中写入:

[Service]
ReadWritePaths=/data/redis
TimeoutStopSec=5

2. 或者直接用命令生成 override 文件(更方便):

sudo mkdir -p /etc/systemd/system/redis-server.service.d
sudo tee /etc/systemd/system/redis-server.service.d/override.conf > /dev/null <<'EOF'
[Service]
ReadWritePaths=/data/redis
TimeoutStopSec=5
EOF

 

3. 让 systemd 生效并重启 Redis

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart redis-server
systemctl status redis-server

 

四、验证修改是否生效

  1. 检查 Redis 当前数据目录:

redis-cli CONFIG GET dir

  2.手动触发一次 RDB 保存:

redis-cli BGSAVE

  3.检查 dump 文件是否生成:

ls -l /data/redis/dump.rdb

 

  4.测试写入是否正常:

redis-cli SET testkey "ok"
redis-cli GET testkey

如果没有报错且数据能写入,说明配置成功。

 

五、解决常见问题

问题原因解决方案
MISCONF Redis is configured to save RDB snapshots ... RDB/AOF 写入失败,stop-writes-on-bgsave-error= yes 修复目录权限 / systemd ReadWritePaths,或者临时执行 CONFIG SET stop-writes-on-bgsave-error no
kill -9 杀不掉 Redis systemd 拉起或进程卡在 D 状态 mask 服务 → kill → 修权限 → unmask → restart
Redis BGSAVE 失败 systemd 沙箱或 SELinux 拦截 修改 override.conf 或添加 SELinux 标签

 

六、总结关键点

  1. 修改 redis.conf 的 dir 只是第一步

  2. 确保目录权限:父目录 root,目标目录 redis:redis

  3. 修改 systemd override 的 ReadWritePaths,否则 Redis 无法写盘

  4. SELinux 需要打标签(如果启用)

  5. 启动前检查目录可写,并手动触发 BGSAVE

  6. 业务恢复时注意 stop-writes-on-bgsave-error

 

posted on 2025-12-31 11:29  星河赵  阅读(0)  评论(0)    收藏  举报

导航