为了能快速了解并处理您的问题,请提供以下基础信息:
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:46 VERSION: 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_socket File "src/gevent/_hub_primitives.py", line 322, in gevent._gevent_c_hub_primitives.wait_on_socket File "src/gevent/_hub_primitives.py", line 313, in gevent._gevent_c_hub_primitives._primitive_wait File "src/gevent/_hub_primitives.py", line 314, in gevent._gevent_c_hub_primitives._primitive_wait File "src/gevent/_hub_primitives.py", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait File "src/gevent/_hub_primitives.py", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait File "src/gevent/_hub_primitives.py", line 55, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait File "src/gevent/_waiter.py", line 154, in gevent._gevent_c_waiter.Waiter.get File "src/gevent/_greenlet_primitives.py", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch File "src/gevent/_greenlet_primitives.py", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch File "src/gevent/_greenlet_primitives.py", line 65, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch File "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 error File "/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, **options File "/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)}'}
|
|