沧海笑软件开发 发表于 2025-11-21 00:44:11

【已解答】redis备份286M数据库超时错误

为了能快速了解并处理您的问题,请提供以下基础信息:面板、插件版本:
Linux面板11.3.0redis 7.4.6
系统版本:
系统:Ubuntu 24.04.2
问题描述:
redis备份286M数据库超时错误
怀疑是数据库太大了?

https://www.bt.cn/bbs/thread-140116-1-1.html

出错了,面板运行时发生错误!redis.exceptions.TimeoutError: Timeout reading from socket
REQUEST_DATE: 2025-11-21 00:36:46VERSION: Ubuntu 24.04.2 LTS (Noble Numbat) x86_64(Py3.7.16) - 11.3.0 REMOTE_ADDR: 123.185.77.88 REQUEST_URI: POST /database/redis/ToBackup?REQUEST_FORM: {}USER_AGENT: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0Traceback (most recent call last):File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/_parsers/socket.py", line 65, in _read_from_socket    data = self._sock.recv(socket_read_size)File "/www/server/panel/pyenv/lib/python3.7/site-packages/gevent/_socketcommon.py", line 663, in recv    self._wait(self._read_event)File "src/gevent/_hub_primitives.py", line 317, in gevent._gevent_c_hub_primitives.wait_on_socketFile "src/gevent/_hub_primitives.py", line 322, in gevent._gevent_c_hub_primitives.wait_on_socketFile "src/gevent/_hub_primitives.py", line 313, in gevent._gevent_c_hub_primitives._primitive_waitFile "src/gevent/_hub_primitives.py", line 314, in gevent._gevent_c_hub_primitives._primitive_waitFile "src/gevent/_hub_primitives.py", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.waitFile "src/gevent/_hub_primitives.py", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.waitFile "src/gevent/_hub_primitives.py", line 55, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.waitFile "src/gevent/_waiter.py", line 154, in gevent._gevent_c_waiter.Waiter.getFile "src/gevent/_greenlet_primitives.py", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switchFile "src/gevent/_greenlet_primitives.py", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switchFile "src/gevent/_greenlet_primitives.py", line 65, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switchFile "src/gevent/_gevent_c_greenlet_primitives.pxd", line 35, in gevent._gevent_c_greenlet_primitives._greenlet_switchsocket.timeout: timed outDuring handling of the above exception, another exception occurred:Traceback (most recent call last):File "/www/server/panel/BTPanel/__init__.py", line 2559, in publicObject    res = run_obj.run(toObject, defs, get)File "/www/server/panel/BTPanel/__init__.py", line 2506, in run    result = getattr(toObject, get.action)(get)File "/www/server/panel/class/panelDatabaseController.py", line 85, in model    result = PluginLoader.module_run(module_name,def_name,pdata)File "/www/server/panel/class/databaseModel/redisModel.py", line 462, in ToBackup    redis_obj.redis_conn(db_idx).save()File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/commands/core.py", line 1247, in save    return self.execute_command("SAVE", **kwargs)File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/client.py", line 549, in execute_command    lambda error: self._disconnect_raise(conn, error),File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/retry.py", line 49, in call_with_retry    fail(error)File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/client.py", line 549, in <lambda>    lambda error: self._disconnect_raise(conn, error),File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/client.py", line 535, in _disconnect_raise    raise errorFile "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/retry.py", line 46, in call_with_retry    return do()File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/client.py", line 547, in <lambda>    conn, command_name, *args, **optionsFile "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/client.py", line 522, in _send_command_parse_response    return self.parse_response(conn, command_name, **options)File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/client.py", line 562, in parse_response    response = connection.read_response()File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/connection.py", line 512, in read_response    response = self._parser.read_response(disable_decoding=disable_decoding)File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/_parsers/resp2.py", line 15, in read_response    result = self._read_response(disable_decoding=disable_decoding)File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/_parsers/resp2.py", line 25, in _read_response    raw = self._buffer.readline()File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/_parsers/socket.py", line 115, in readline    self._read_from_socket()File "/www/server/panel/pyenv/lib/python3.7/site-packages/redis/_parsers/socket.py", line 78, in _read_from_socket    raise TimeoutError("Timeout reading from socket")redis.exceptions.TimeoutError: Timeout reading from socket



# 修改宝塔面板的 Redis 连接配置,设置超时5分钟,无效
# 文件位置:/www/server/panel/class/databaseModel/redisModel.py
# 在第462行附近修改# 原代码:redis_obj.redis_conn(db_idx).save()
# 修改为:
import redisredis_conn = redis_obj.redis_conn(db_idx)redis_conn.config_set('timeout', 300)
# 设置5分钟超时redis_conn.save()




# 修改备份方法,使用后台保存,无效
def ToBackup(pdata):    try:      redis_conn = redis_obj.redis_conn(db_idx)      
# 使用 BGSAVE 代替 SAVE(后台保存,不阻塞)      
redis_conn.bgsave()               
# 检查保存状态      
import time      for i in range(30):# 等待30秒            time.sleep(1)            if redis_conn.lastsave() != redis_conn.info().get('rdb_last_save_time'):                break      return {'status': True, 'msg': '备份已启动'}    except Exception as e:      return {'status': False, 'msg': f'备份失败: {str(e)}'}
相关截图(日志、错误):

阿珂 发表于 2025-11-21 10:23:25

可能当前连接数过多 停止相关连接再备份试试 不行直接备份/www/server/redis目录
页: [1]
查看完整版本: 【已解答】redis备份286M数据库超时错误