redis pidfile数据库 关闭报错 Failed opening the RDB file dump.rdb

您还可以使用以下方式登录
当前位置:&>&&>&&>& > Redis安全配置,以防数据库被入侵恶意清空,数据丢失,且dump.rdb文件无法恢复
Redis安全配置,以防数据库被入侵恶意清空,数据丢失,且dump.rdb文件无法恢复
Redis安全配置,以防数据库被入侵恶意清空,数据丢失,且dump.rdb文件无法恢复。最近比较衰,Redis数据库被好几次恶意攻击,导致里面的数据完全丢失。dump.rdb和appendonly.aof文件都不能恢复。一开始没有意识到数据库被攻击,后来几个数据库连续这样,才发现有问题。被攻击后redis里面多了一个crackit表,打开一看发现对方通过入侵自己的redis数据库,然后利用dump文件获得服务器的root权限,企图使用自己的数据库挖矿(minerd,俗称挖比特币)。最近有大量的服务器被人入侵数据库,然后占用服务器的cpu挖比特币,所以对redis进行安全配置很有必要!很有必要!很有必要!千万不能疏忽!大家一般使用Redis默认的.conf文件,默认端口是6379,没有认证密码,默认处理任何请求来源,这样会把自己的数据库完全暴露在外网环境中,十分危险。Redis安全配置对Redis进行安全配置主要从下面几个方面:为redis添加密码认证添加密码认证有临时的和长久的两种方法 1. 可以在redis运行时添加密码认证,在redis-cli连接redis后执行命令
CONFIG SET requirepass &myPassWord&
不过这种方式添加的密码认证只是临时的,在redis重启后密码就会失效 2.修改redis.conf文件,redis中默认注释掉了
requirepass mypassword
取消注释,然后将后面的字符串修改为自己的密码
密码越复杂越好吧禁止一些高危指令
修改redis.conf文件,修改一些危险的命令。比如,在redis.conf中添加
rename-command CONFIG &&
rename-command FLUSHALL &&
rename-command FLUSHDB &&
rename-command EVAL &&
后面为空字符串相当于禁用了改命令,也可以根据自己需要将空字符串换成自己想要的命令重命名,比如:
rename-command CONFIG &CONFIG_1&
但是需要注意一点的是,如果appendonly.aof文件中有执行过相应的修改数据命令,比如 FLUSHALL,那么命令重命名后可能导致数据恢复失败。禁止外网访问Redis
修改redis.conf文件,里面有一条被注释的命令
bind 127.0.0.1
该条命令表示,redis只允许本地访问,如果注释掉改行或者将后面改为0.0.0.0,则表示任何IP均可访问。也可以根据自己需要,将后面的IP绑定为特定的IP访问,但是貌似只能绑定一个IP访问。比如:
bind 139.127.1.125修改Redis默认端口
修改redis的端口,这一点很重要,使用默认的端口很危险,redis.conf中有一行为
将其修改为自己指定的端口(可随意),反正不使用默认的端口就好加密后Redis客户端访问加密后使用客户端访问可以直接使有两种方式在访问时直接输入密码
redis-cli -h IP地址 -p 端口 -a 密码先访问,然后再执行操作之前会提示需要密码
redis-cli -h IP地址 -p 端口
auth 密码如果没有对CONFIG命令重命名,可以在使用密码登陆后使用命令获得密码
CONFIG GET requirepass加密后java访问
如果是使用Jedis访问,那么可以参照代码:
Jedis redis=new Jedis(&139.129.217.181&,22121);
redis.auth(&Ictmcg!16&);
redis.ping();
如果是使用JedisPool访问,可以参照代码;
JedisPool Jedis pool = new JedisPool(config, REDIS_IP,timeout , REDIS_PORT, ,yourpassword); //timeout为读取超时,如果超过此事件没有读取结果就会报timeout异常就爱阅读www.92to.com网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
欢迎转载:
相关推荐:redis&关闭RDB持久化
在 Redis 2.2 或以上版本,可以在不重启的情况下,从 RDB 切换到 AOF :
&&& 为最新的
dump.rdb 文件创建一个备份。
将备份放到一个安全的地方。
执行以下两条命令:
redis-cli& CONFIG SET appendonly yes
redis-cli& CONFIG SET save ""
确保命令执行之后,数据库的键的数量没有改变。
确保写命令会被正确地追加到 AOF 文件的末尾。
步骤 3 执行的第一条命令开启了 AOF 功能: Redis 会阻塞直到初始 AOF 文件创建完成为止, 之后 Redis
会继续处理命令请求, 并开始将写入命令追加到 AOF 文件末尾。
步骤 3 执行的第二条命令用于关闭 RDB 功能。 这一步是可选的, 如果你愿意的话, 也可以同时使用 RDB 和 AOF
这两种持久化功能
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。热爱生活和学习!!!
Redis安全配置,以防数据库被入侵恶意清空,数据丢失,且dump.rdb文件无法恢复
最近比较衰,Redis数据库被好几次恶意攻击,导致里面的数据完全丢失。dump.rdb和appendonly.aof文件都不能恢复。一开始没有意识到数据库被攻击,后来几个数据库连续这样,才发现有问题。
被攻击后redis里面多了一个crackit表,打开一看发现对方通过入侵自己的redis数据库,然后利用dump文件获得服务器的root权限,企图使用自己的数据库挖矿(minerd,俗称挖比特币)。最近有大量的服务器被人入侵数据库,然后占用服务器的cpu挖比特币,所以对redis进行安全配置很有必要!很有必要!很有必要!千万不能疏忽!
大家一般使用Redis默认的.conf文件,默认端口是6379,没有认证密码,默认处理任何请求来源,这样会把自己的数据库完全暴露在外网环境中,十分危险。
Redis安全配置
对Redis进行安全配置主要从下面几个方面:
为redis添加密码认证
添加密码认证有临时的和长久的两种方法
1. 可以在redis运行时添加密码认证,在redis-cli连接redis后执行命令
CONFIG SET requirepass "myPassWord"
不过这种方式添加的密码认证只是临时的,在redis重启后密码就会失效
2.修改redis.conf文件,redis中默认注释掉了
requirepass mypassword
取消注释,然后将后面的字符串修改为自己的密码
密码越复杂越好吧
禁止一些高危指令
修改redis.conf文件,修改一些危险的命令。比如,在redis.conf中添加
rename-command CONFIG ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command EVAL ""
后面为空字符串相当于禁用了改命令,也可以根据自己需要将空字符串换成自己想要的命令重命名,比如:
rename-command CONFIG "CONFIG_1"
但是需要注意一点的是,如果appendonly.aof文件中有执行过相应的修改数据命令,比如 FLUSHALL,那么命令重命名后可能导致数据恢复失败。
禁止外网访问Redis
修改redis.conf文件,里面有一条被注释的命令
bind 127.0.0.1
该条命令表示,redis只允许本地访问,如果注释掉改行或者将后面改为0.0.0.0,则表示任何IP均可访问。也可以根据自己需要,将后面的IP绑定为特定的IP访问,但是貌似只能绑定一个IP访问。比如:
bind 139.127.1.125
修改Redis默认端口
修改redis的端口,这一点很重要,使用默认的端口很危险,redis.conf中有一行为
将其修改为自己指定的端口(可随意),反正不使用默认的端口就好,比如
port 21122
加密后Redis客户端访问
加密后使用客户端访问可以直接使有两种方式
在访问时直接输入密码
redis-cli -h IP地址 -p 端口 -a 密码
先访问,然后再执行操作之前会提示需要密码
redis-cli -h IP地址 -p 端口
如果没有对CONFIG命令重命名,可以在使用密码登陆后使用命令获得密码
CONFIG GET requirepass
加密后java访问
如果是使用Jedis访问,那么可以参照代码:
Jedis redis=new Jedis("XXX.XXX.XXX.XXX",6379);
redis.auth("XXXXXX");
redis.ping();
如果是使用JedisPool访问,可以参照代码;
JedisPool Jedis pool = new JedisPool(config,REDIS_IP,REDIS_PORT,timeout,yourpassword);
注意:redis配置修改后需要重启redis才会生效,重启方式:
redis-server redis.conf
参考链接:
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!https://segmentfault.com/a/5982
当建立主从关系时,slave配置slaveof &master_host& &master_port& 。slave服务器会向主服务器发送一个sync命令。master接受并fork一个进程来执行BGSAVE命令。该命令生成一个RDB文件并且全量发送给slave服务器,slave服务器接收并载入RDB文件,同时,主服务器将缓冲区的命令以增量的方式发送给从服务器,最终使从服务器的数据状态和主服务器保持一致。
当redis生成dump.rdb文件时,工作过程如下
redis主进程fork一个子进程
fork出来的子进程将内存的数据集dump到临时的RDB中
当子进程对临时的RDB文件写入完毕,redis用新的RDB文件代替旧的RDB文件
AOF :append only file。每当Redis执行一个改变数据集的命令时,这个命令都会被追加到AOF文件的末尾。当redis重新启动时,程序可以通过AOF文件恢复数据
Redis 监控最直接的方法当然就是使用系统提供的 info 命令来做了,只需要执行下面一条命令,就能获得 Redis 系统的状态报告。
redis-cli info
其中跟RDB文件状态监控相关的参数
rdb_changes_since_last_save 表明上次RDB保存以后改变的key次数
rdb_bgsave_in_progress 表示当前是否在进行bgsave操作。是为1
rdb_last_save_time 上次保存RDB文件的时间戳
rdb_last_bgsave_time_sec 上次保存的耗时
rdb_last_bgsave_status 上次保存的状态
rdb_current_bgsave_time_sec 目前保存RDB文件已花费的时间
其中跟AOF文件状态监控相关的参数
aof_enabled AOF文件是否启用
aof_rewrite_in_progress 表示当前是否在进行写入AOF文件操作
aof_rewrite_scheduled
aof_last_rewrite_time_sec 上次写入的时间戳
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok 上次写入状态
aof_last_write_status:ok 上次写入状态
在我们优化master之前,可以看看目前我们的其中一个生产环境的的redis的持久化状态
通过redis-cli的info命令,可以看到 「rdb_last_bgsave_time_sec」参数的值,这个值表示上次bgsave命令执行的时间。在磁盘IO定量的情况下,redis占用的内存越大,这个值也就越大。通常「rdb_last_bgsave_time_sec」这个时间取决于两个因素:
REDIS占用的内存大小
磁盘的写速度。
rdb_last_bgsave_time_sec:85&这个标识表示我们上次保存dump RDB文件的时间。这个耗时受限于上面提到的两个因素。
当redis处于 rdb_bgsave_in_progress状态时,通过vmstat命令查看性能,得到wa值偏高,也就是说CPU在等待IO的请求完成,我们线上的一个应用redis占用的内存是5G左右,也就是redis会生成大约5G左右的dump.rdb文件
vmstat命令
cs us sy id wa st
0 223912 2242680 5722008
200 48648 3640 5443
0 222796 2242680 5722052
16 48272 2417 5019
0 222300 2242680 5722092
40 24612 3042 3568
0 220068 2242680 5722124
64 40328 4304 4737
0 218952 2242680 5722216
100 48648 4966 5786
0 215356 2242680 5722256
0 66168 3546 4382
通过上面的输出,看到BGSAVE&对于IO的性能影响比较大
那么该如何解决由RDB文件带来的性能上不足的问题,又能保证数据持久化的目的
通常的设计思路就是利用「Replication」机制来解决:即master不开启RDB日志和AOF日志,来保证master的读写性能。而slave则开启rdb和aof来进行持久化,保证数据的持久性,
我在测试机器上,开启两个实例,端口分别为
master: 172.16.76.232 6379
172.16.76.232 6380
修改master的redis.conf
appendonly&no
分别启动master和slave的redis
service redis&start
修改slave配置,指向master服务器
redis-cli & slaveof 172.16.76.232 6379
查看slave的复制状态
redis-cli & info replication
#!/bin/bash
while(($ID&50001))
redis-cli set "my:$ID" "aaa_okthisis_Omb5EVIwBgPHgbRj64raygpeRLKaNhyB9sLF_$ID"
redis-cli set "your:$ID" "your_okthisis_Omb5EVIwBgPHgbRj64raygpeRLKaNhyB9sLF_$ID"
redis-cli set "her:$ID" "her_okthisis_Omb5EVIwBgPHgbRj64raygpeRLKaNhyB9sLF_$ID"
redis-cli set "his:$ID" "his_okthisis_Omb5EVIwBgPHgbRj64raygpeRLKaNhyB9sLF_$ID"
ID=$(($ID+1))
master&redis & killall -9&redis-server
SLAVE&redis & SLAVEOF NO ONE
取消Slave的同步,避免主库在未完成数据恢复前就重启,进而直接覆盖掉从库上的数据,导致所有的数据丢失。
cp /data/redis_data_slave/dump.rdb /data/redis_data/
cp /data/redis_data_slave/Append.AOF /data/redis_data/
master&redis & dbsize
查看数据是否恢复
slave&redis & slaveof&172.16.76.232&6379
背景介绍:
我们的一台redis服务器,硬件配置为4核,4G内存。redis持久话方案是RDB。前面几个月redis使用的
内存在1G左右。在一次重启之后,redis只恢复了部分数据,这时查看redis.log文件。看见了如下的错误
[23635] 25 Jul 08:30:54.059 * 10000 changes in 60 seconds. Saving...
[23635] 25 Jul 08:30:54.059
这时,想起了redis启动时的警告
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.
警告:过量使用内存设置为0!在低内存环境下,后台保存可能失败。为了修正这个问题,
请在/etc/sysctl.conf 添加一项 'vm.overcommit_memory = 1' ,
然后重启(或者运行命令'sysctl vm.overcommit_memory=1' )使其生效。
vm.overcommit_memory不同的值说明
0 表示检查是否有足够的内存可用,如果是,允许分配;如果内存不够,拒绝该请求,并返回一个错误给应用程序。
1 允许分配超出物理内存加上交换内存的请求
2 内核总是返回true
redis的数据回写机制分为两种
同步回写即SAVE命令。redis主进程直接写数据到磁盘。当数据量大时,这个命令将阻塞,响应时间长
异步回写即BGSAVE命令。redis 主进程fork一个子进程,复制主进程的内存并通过子进程回写数据到磁盘。
由于RDB文件写的时候fork一个子进程。相当于复制了一个内存镜像。当时系统的内存是4G,而redis占用了近3G的内存,因此肯定会报内存无法分配。如果 「vm.overcommit_memory」设置为0,在可用内存不足的情况下,就无法分配新的内存。如果 「vm.overcommit_memory」设置为1。 那么redis将使用交换内存。
方法一: 修改内核参数 vi /etc/sysctl。设置&vm.overcommit_memory = 1&然后执行
```&sysctl -p&```
方法二: 使用交换内存并不是一个完美的方案。最好的办法是扩大物理内存。
使用slaveof命令后,长时间看不到数据同步。以为复制功能失效,或配置错了。其实,不用担心,有两种方法可以确定是否正在建立复制。
在创建Redis复制时,一开始可能会发现Slave长时间不开始同步数据,可能数据量太大,导致了Master正在dump数据慢,此时如果你在Master上执行「top -p $(pgrep -d, redis-server)」命令,就能看到dump的过程
方式一: 通过「top」命令
[root@img1_u ~]
redis-server是单进程的,现在通过「top」命令查看已经有2个进程,因为之前提到的,redis在建立复制的时,会在
主服务器上执行&BGSAVE&命令。fork一个子进程,dump出RDB文件。 master dump 完毕,然后再将快照文件传给slave。
方式二:通过「rdb_bgsave_in_progress」标识
进入master的redis-cli
如果「rdb_bgsave_in_progress」为1,那么master正在进行bgsave命令。同时「rdb_current_bgsave_time_sec」显示bgsave命令已经执行的时间。由于在master服务器上默认不开启RDB和AOF日志,如果「rdb_bgsave_in_progress」为1,那么就可以肯定由于复制原因发送一个「bgsave」指令 dump 出 RDB 文件。
有运营的同事反应,系统在登录的情况下,操作时会无缘无故跳到登录页面。 由于我们的系统做了分布式的session,默认把session放到redis里,按照以往的故障经验。可能是redis使用了最大内存上限导致了无法设置key。 登录 redis 服务器查看 redis.conf 文件设置了最大8G内存「maxmemory 8G」然后通过「redis-cli info memory 」 查询到目前的内存使用情况 「used_memory_human:7.71G」接着通过redis-cli工具设置值 。报错 「OOM command not allowed when used memory 」。再次验证了redis服务器已经达到了最大内存
关闭redis 服务器&redis-cli shutdown
修改配置文件的最大内存 「maxmemory」
启动redis服务器&redis-server redis.conf
阅读(...) 评论()当前位置:
执行save失败
Failed opening rdb for saving: No such file or directory
执行save失败
Failed opening rdb for saving: No such file or directory
来源:网络整理&&&&&时间: 3:17:11&&&&&关键词:
关于网友提出的“redis
执行save失败
Failed opening rdb for saving: No such file or directory”问题疑问,本网通过在网上对“redis
执行save失败
Failed opening rdb for saving: No such file or directory”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:redis
执行save失败
Failed opening rdb for saving: No such file or directory
127.0.0.1:6379& save
(error) ERR Background save already in progress
127.0.0.1:6379&&
错误日志:
3162:M 03 Aug 22:47:48.051 * Background saving started by pid 6625
6625:C 03 Aug 22:47:48.053 # Failed opening .rdb for saving: No such file or directory
3162:M 03 Aug 22:47:48.152 # Background saving error
3162:M 03 Aug 22:47:54.004 * 1 changes in 900 seconds. Saving...
3162:M 03 Aug 22:47:54.005 * Background saving started by pid 6629
6629:C 03 Aug 22:47:54.008 # Failed opening .rdb for saving: No such file or directory
3162:M 03 Aug 22:47:54.108 # Background saving error
配置信息:
# The working directory.
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
# The Append Only File will also be created inside this directory.
# Note that you must specify a directory here, not a file name.dir /home/wang/ob_rel/redis
这是是啥原因呢!!
解决方案1:
【处理结果】 原因已经找到
dir /home/wang/ob_rel/redis
dir /home/wang/ob_rel/redis/
以上介绍了“redis
执行save失败
Failed opening rdb for saving: No such file or directory”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1401720.html
上一篇: 下一篇:

我要回帖

更多关于 error opening file 的文章

 

随机推荐