详解Redis强制关闭Redis快照导致不能持久化错误的解决办法
liebian365 2024-10-28 17:21 23 浏览 0 评论
概述
记一次生产环境故障,运行Redis时发生错误,无法持久化到磁盘以及解决的过程,记录如下:
01
问题报错
ERR Error running script (call to f_286dd696309f4ab2005d9df55e2410a1170fe3b3): @user_script:1: @user_script: 1: -MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error. . channel: [id: 0xc3478197, L:/127.0.0.1:49527 - R:/127.0.0.1:6379] command: CommandData [promise=org.redisson.misc.RedissonPromise@ad2aa3[Not completed], command=(EVAL), params=[local value = redis.call('hget', KEYS[1], ARGV[2]); if value == false then return nil; end; local t,..., 3, t01:EVENT, redisson__timeout__set:{t01:EVENT}, redisson__idle__set:{t01:EVENT}, 1558606013597, [-84, -19, 0, 5, 116, 0, 13, 83, 69, 76, ...]], codec=org.redisson.codec.SerializationCodec@15b63ff]
02
思路
Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。
这里是因为强制关闭Redis快照导致不能持久化。
03
解决方案
运行config set stop-writes-on-bgsave-error no命令后,关闭配置项stop-writes-on-bgsave-error解决该问题。
$ ./redis-cli 127.0.0.1:6379> config set stop-writes-on-bgsave-error no
04
如何选择使用哪种持久化方式?
一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 应该同时使用两种持久化功能。如果非常关心数据, 但仍然可以承受数分钟以内的数据丢失, 那么可以只使用 RDB 持久化。有很多用户都只使用 AOF 持久化, 但并不推荐这种方式, 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快, 除此之外, 使用 RDB 还可以避免AOF 程序的 一些bug 。
1、快照
在默认情况下, Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。我们也可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。也可以通过调用 SAVE或者 BGSAVE , 手动让 Redis 进行数据集保存操作。
比如以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:
save 60 1000
这种持久化方式被称为快照 snapshotting.
2、工作方式
当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作:
- Redis 调用forks. 同时拥有父进程和子进程。
- 子进程将数据集写入到一个临时 RDB 文件中。
- 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。
这种工作方式使得 Redis 可以从写时复制(copy-on-write)机制中获益。
3、只追加操作的文件(Append-only file,AOF)
快照功能并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方式: AOF 持久化。
可以在配置文件中打开AOF方式:
appendonly yes
从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。这样的话, 当 Redis 重新启时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。
后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下!
相关推荐
- Pandoc安装、使用、快速上手(pandoc安装教程)
-
Pandoc安装、使用、快速上手Pandoc如果你需要将文档从一种格式转换成另一种格式,那么Pandoc是你的一把瑞士军刀,Pandoc可以将下列格式文档进行相互转换。Markdown、Microso...
- Pinocchio 安装教程|机器人学的必备库
-
视频讲解:Pinocchio安装教程|机器人学的必备库_哔哩哔哩_bilibilihttps://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/ma...
- 常用linux命令:netstat(常用linux命令有多少个)
-
linuxnetstat命令用于显示网络状态,可用于列出系统上所有的网络套接字连接情况#显示所有的连接$netstat-aActiveInternetconnections(serv...
- 【收藏】Linux服务器常用巡检命令
-
在Linux服务器上进行常规巡检是确保服务器稳定性和安全性的重要措施之一。以下是一些常用的巡检命令和技巧:1.查看系统信息1.1系统信息显示命令:uname-a[root@linux100~]...
- 详解linux内核网络数据包发送在UDP协议层的处理与监控
-
udp_sendmsg这个函数定义在net/ipv4/udp.c,函数很长,分段来看。UDP插入UDPudp_sendmsgcorking是一项优化技术,允许内核将多个数据累积成一体的数据...
- Linux实例常用内核网络参数介绍与常见问题处理
-
Linux实例常用内核网络参数介绍与常见问题处理概述本文主要介绍常见的Linux内核参数及相关问题的处理方式。详细信息注意:Linux从4.12内核版本开始移除了tcp_tw_recycle配置。即移...
- Linux配置网络(rocky linux配置网络)
-
1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...
- Linux安全之网络防火墙(linux防火墙配置基本步骤)
-
纸上得来终觉浅,绝知此事要躬行。iptables是运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的处理和转发。在大部分Linux发行版中,可以通...
- linux命令 - fuser、lsof、pidof学习
-
fuser可以借由文件(或文件系统)找出正在使用该文件的程序。有的时候我想要知道我的程序到底在这次启动过程中打开了多少文件,可以利用fuser来观察啦!举例来说,你如果卸载时发现系统通知:“...
- Linux使用中的一些问题及解决过程(记录1)
-
1.在Linux虚拟中安装dhcpv6后,Server发送的dhcpv6advertise报文中的udp校验和出错,导致用户不能获取IPv6地址修正方法:将该接口的校验关闭ethtool--of...
- 比 netstat 好用?Linux 网络状态工具 ss 详解
-
ss命令用于显示socket状态。他可以显示PACKETsockets,TCPsockets,UDPsockets,DCCPsockets,RAWsockets,Unixdomains...
- 七、网工必备“基础命令”:像查水电表一样轻松排查网络问题!
-
网络命令听起来高深,但其实它们就像你家里的“工具箱”——拧螺丝用螺丝刀,测电路用电笔,而排查网络问题,就用这些命令!今天我们就用生活中最常见的例子,带你轻松掌握ping、ipconfig、tracer...
- 为什么 Windows 病毒不影响 Linux 机器?
-
病毒是一种计算机程序。病毒不会影响Linux的原因和MicrosoftExcel不能在Linux上运行的原因是一样的:Linux不能运行Windows程序。你可以使用特殊的软件,...
- 别让Linux网络基础拖后腿!这些 lsof 骚操作你真的了解吗?
-
lsof是Linux系统管理中极为强大的工具,尤其在网络问题排查中堪称神器。以下从基础到进阶的用法解析,帮你彻底掌握网络相关的骚操作:一、基础必知:网络连接的本质Linux中一切皆文件,网络连...
- 别让Linux网络基础拖后腿!这些 netstat 骚操作你真的了解吗?
-
在Linux网络管理和故障排查中,netstat确实是必备的瑞士军刀。掌握这些进阶技巧能显著提升效率,尤其当服务器出现连接数爆满、端口冲突或异常流量时。以下乃是自实战之中所总结而成的深度操作指南:继续...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)