2568c0380b
MySQL:
- 新增 use_ssl 选项;MariaDB 11.x 默认强制 SSL 且默认 verify cert,
故启用 SSL 时同时加 --skip-ssl-verify-server-cert 以兼容自签名证书。
任务编辑回显:
- 后端 JobOut 新增 source_config_safe 字段,解密后敏感字段(password/token/
secret_key/access_key)脱敏为 "***"。
- 更新端点接收 source_config;若密码字段为 "***" 则保留原值不变,
支持"不改密码只改其它字段"的常见场景。
- 前端 JobForm 完整回显所有数据源字段,type='edit' 时去掉 disabled。
InfluxDB 备份(新增类型):
- 后端 core/backup/influxdb.py:
- v2.x:调用 influx CLI(influxdb2-client-2.7.5 二进制直接安装)执行 influx backup
生成目录后 tar.gz 流式打包上传。
- v1.x:通过 HTTP API 调用 /query?db=...&q=SELECT * FROM /.*/ 拉取全量数据
导出为 CSV + META.txt。
- Dockerfile:直接下载 influx CLI 二进制(绕开 apt 签名问题)。
- 前端 JobForm:根据 version 动态显示 v1/v2 表单字段。
- schemas/job.py:新增 InfluxDBSourceConfigV1 / V2。
- 类型字面量扩展:'mysql' | 'directory' | 'influxdb'。
Co-Authored-By: Claude <noreply@anthropic.com>
300 lines
24 KiB
Plaintext
300 lines
24 KiB
Plaintext
2026-06-22 18:31:38 | INFO | app.main | Database tables ensured
|
|
2026-06-22 18:31:38 | INFO | app.main | Existing users found (1), skip admin init
|
|
2026-06-22 18:31:38 | INFO | apscheduler.scheduler | Scheduler started
|
|
2026-06-22 18:31:38 | INFO | app.scheduler.scheduler | Scheduler started
|
|
2026-06-22 18:31:38 | INFO | app.main | Application ready
|
|
2026-06-22 18:32:10 | INFO | app.core.executor | [10:32:10] Backup started: run_id=7 job=app-dir-test trigger=manual
|
|
2026-06-22 18:32:10 | INFO | app.core.executor | [10:32:10] Metadata: filename=app-dir-test-app-20260622-183210.tar.gz content_type=application/gzip
|
|
2026-06-22 18:32:10 | INFO | app.core.executor | [10:32:10] Storage test: ok=True msg=OK: writable /app/data/backups
|
|
2026-06-22 18:32:10 | INFO | app.core.executor | [10:32:10] Streaming backup to storage key=app-dir-test/2026-06-22/app-dir-test-app-20260622-183210.tar.gz ...
|
|
2026-06-22 18:32:10 | INFO | app.core.backup.directory | Taring directory /app (exclude=['.git', '__pycache__', 'node_modules'])
|
|
2026-06-22 18:32:10 | INFO | app.core.executor | [10:32:10] Backup success: size=63600 bytes sha256=530e79b90471 elapsed=0s
|
|
2026-06-22 18:32:10 | INFO | app.core.executor | Backup run_id=7 finished status=success
|
|
2026-06-22 18:35:48 | INFO | app.main | Database tables ensured
|
|
2026-06-22 18:35:48 | INFO | app.main | Existing users found (1), skip admin init
|
|
2026-06-22 18:35:48 | INFO | apscheduler.scheduler | Scheduler started
|
|
2026-06-22 18:35:48 | INFO | app.scheduler.scheduler | Scheduler started
|
|
2026-06-22 18:35:48 | INFO | app.main | Application ready
|
|
2026-06-22 18:36:21 | INFO | app.core.executor | [10:36:21] Backup started: run_id=8 job=app-dir-test trigger=manual
|
|
2026-06-22 18:36:21 | INFO | app.core.executor | [10:36:21] Metadata: filename=app-dir-test-app-20260622-183621.tar.gz content_type=application/gzip
|
|
2026-06-22 18:36:21 | INFO | app.core.executor | [10:36:21] Storage test: ok=True msg=OK: writable /app/data/backups
|
|
2026-06-22 18:36:21 | INFO | app.core.executor | [10:36:21] Streaming backup to storage key=app-dir-test/2026-06-22/app-dir-test-app-20260622-183621.tar.gz ...
|
|
2026-06-22 18:36:21 | INFO | app.core.backup.directory | Taring directory /app (exclude=['.git', '__pycache__', 'node_modules'])
|
|
2026-06-22 18:36:21 | INFO | app.core.executor | [10:36:21] Backup success: size=127360 bytes sha256=3af4260e15ab elapsed=0s
|
|
2026-06-22 18:36:21 | INFO | app.core.executor | Backup run_id=8 finished status=success
|
|
2026-06-22 18:44:59 | INFO | app.core.executor | [10:44:59] Backup started: run_id=9 job=mysql_tmp trigger=manual
|
|
2026-06-22 18:44:59 | INFO | app.core.executor | [10:44:59] Metadata: filename=mysql_tmp-asset_management-20260622-184459.sql.gz content_type=application/gzip
|
|
2026-06-22 18:44:59 | INFO | app.core.executor | [10:44:59] Storage test: ok=True msg=OK: writable /app/backup_data
|
|
2026-06-22 18:44:59 | INFO | app.core.executor | [10:44:59] Streaming backup to storage key=mysql_tmp/2026-06-22/mysql_tmp-asset_management-20260622-184459.sql.gz ...
|
|
2026-06-22 18:44:59 | INFO | app.core.backup.mysql | Executing mysqldump for db=asset_management host=10.168.1.209
|
|
2026-06-22 18:44:59 | ERROR | app.core.executor | Backup run_id=9 failed
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/executor.py", line 88, in run_backup
|
|
size, sha = await storage.upload_stream(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/app/app/core/storage/local.py", line 55, in upload_stream
|
|
async for chunk in source:
|
|
File "/app/app/core/executor.py", line 84, in _consume_with_progress
|
|
async for chunk in backup.produce():
|
|
File "/app/app/core/backup/mysql.py", line 95, in produce
|
|
raise RuntimeError(
|
|
RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2002: "Can't connect to server on '10.168.1.209' (115)" when trying to connect
|
|
2026-06-22 18:44:59 | ERROR | app.core.executor | [10:44:59] Backup failed: RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2002: "Can't connect to server on '10.168.1.209' (115)" when trying to connect
|
|
2026-06-22 18:44:59 | INFO | app.core.executor | Backup run_id=9 finished status=failed
|
|
2026-06-22 18:46:29 | INFO | app.core.executor | [10:46:29] Backup started: run_id=10 job=back_mysql trigger=manual
|
|
2026-06-22 18:46:29 | INFO | app.core.executor | [10:46:29] Metadata: filename=back_mysql-asset_management-20260622-184629.sql.gz content_type=application/gzip
|
|
2026-06-22 18:46:29 | INFO | app.core.executor | [10:46:29] Storage test: ok=True msg=OK: writable /app/backup_data
|
|
2026-06-22 18:46:29 | INFO | app.core.executor | [10:46:29] Streaming backup to storage key=back_mysql/2026-06-22/back_mysql-asset_management-20260622-184629.sql.gz ...
|
|
2026-06-22 18:46:29 | INFO | app.core.backup.mysql | Executing mysqldump for db=asset_management host=127.0.0.1
|
|
2026-06-22 18:46:29 | ERROR | app.core.executor | Backup run_id=10 failed
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/executor.py", line 88, in run_backup
|
|
size, sha = await storage.upload_stream(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/app/app/core/storage/local.py", line 55, in upload_stream
|
|
async for chunk in source:
|
|
File "/app/app/core/executor.py", line 84, in _consume_with_progress
|
|
async for chunk in backup.produce():
|
|
File "/app/app/core/backup/mysql.py", line 95, in produce
|
|
raise RuntimeError(
|
|
RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2002: "Can't connect to server on '127.0.0.1' (115)" when trying to connect
|
|
2026-06-22 18:46:29 | ERROR | app.core.executor | [10:46:29] Backup failed: RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2002: "Can't connect to server on '127.0.0.1' (115)" when trying to connect
|
|
2026-06-22 18:46:29 | INFO | app.core.executor | Backup run_id=10 finished status=failed
|
|
2026-06-22 18:53:57 | INFO | app.core.executor | [10:53:57] Backup started: run_id=11 job=mysql_backuop trigger=manual
|
|
2026-06-22 18:53:57 | INFO | app.core.executor | [10:53:57] Metadata: filename=mysql_backuop-asset_management-20260622-185357.sql.gz content_type=application/gzip
|
|
2026-06-22 18:53:57 | INFO | app.core.executor | [10:53:57] Storage test: ok=True msg=OK: writable /app/backup_data
|
|
2026-06-22 18:53:57 | INFO | app.core.executor | [10:53:57] Streaming backup to storage key=mysql_backuop/2026-06-22/mysql_backuop-asset_management-20260622-185357.sql.gz ...
|
|
2026-06-22 18:53:57 | INFO | app.core.backup.mysql | Executing mysqldump for db=asset_management host=10.168.1.209
|
|
2026-06-22 18:53:57 | ERROR | app.core.executor | Backup run_id=11 failed
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/executor.py", line 88, in run_backup
|
|
size, sha = await storage.upload_stream(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/app/app/core/storage/local.py", line 55, in upload_stream
|
|
async for chunk in source:
|
|
File "/app/app/core/executor.py", line 84, in _consume_with_progress
|
|
async for chunk in backup.produce():
|
|
File "/app/app/core/backup/mysql.py", line 95, in produce
|
|
raise RuntimeError(
|
|
RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2026: "TLS/SSL error: self-signed certificate in certificate chain" when trying to connect
|
|
2026-06-22 18:53:57 | ERROR | app.core.executor | [10:53:57] Backup failed: RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2026: "TLS/SSL error: self-signed certificate in certificate chain" when trying to connect
|
|
2026-06-22 18:53:57 | INFO | app.core.executor | Backup run_id=11 finished status=failed
|
|
2026-06-22 18:54:42 | INFO | app.core.executor | [10:54:42] Backup started: run_id=12 job=asset-mgmt-test trigger=manual
|
|
2026-06-22 18:54:42 | INFO | app.core.executor | [10:54:42] Metadata: filename=asset-mgmt-test-asset_management-20260622-185442.sql.gz content_type=application/gzip
|
|
2026-06-22 18:54:42 | INFO | app.core.executor | [10:54:42] Storage test: ok=True msg=OK: writable /app/data/backups
|
|
2026-06-22 18:54:42 | INFO | app.core.executor | [10:54:42] Streaming backup to storage key=asset-mgmt-test/2026-06-22/asset-mgmt-test-asset_management-20260622-185442.sql.gz ...
|
|
2026-06-22 18:54:42 | INFO | app.core.backup.mysql | Executing mysqldump for db=asset_management host=10.168.1.209
|
|
2026-06-22 18:54:42 | ERROR | app.core.executor | Backup run_id=12 failed
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/executor.py", line 88, in run_backup
|
|
size, sha = await storage.upload_stream(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/app/app/core/storage/local.py", line 55, in upload_stream
|
|
async for chunk in source:
|
|
File "/app/app/core/executor.py", line 84, in _consume_with_progress
|
|
async for chunk in backup.produce():
|
|
File "/app/app/core/backup/mysql.py", line 95, in produce
|
|
raise RuntimeError(
|
|
RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2026: "TLS/SSL error: self-signed certificate in certificate chain" when trying to connect
|
|
2026-06-22 18:54:42 | ERROR | app.core.executor | [10:54:42] Backup failed: RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2026: "TLS/SSL error: self-signed certificate in certificate chain" when trying to connect
|
|
2026-06-22 18:54:42 | INFO | app.core.executor | Backup run_id=12 finished status=failed
|
|
2026-06-22 19:03:33 | INFO | app.main | Database tables ensured
|
|
2026-06-22 19:03:33 | INFO | app.main | Existing users found (1), skip admin init
|
|
2026-06-22 19:03:33 | INFO | apscheduler.scheduler | Scheduler started
|
|
2026-06-22 19:03:33 | INFO | app.scheduler.scheduler | Scheduler started
|
|
2026-06-22 19:03:33 | INFO | app.main | Application ready
|
|
2026-06-22 19:03:37 | INFO | app.core.executor | [11:03:37] Backup started: run_id=13 job=asset-mgmt-test trigger=manual
|
|
2026-06-22 19:03:37 | INFO | app.core.executor | [11:03:37] Metadata: filename=asset-mgmt-test-asset_management-20260622-190337.sql.gz content_type=application/gzip
|
|
2026-06-22 19:03:37 | INFO | app.core.executor | [11:03:37] Storage test: ok=True msg=OK: writable /app/data/backups
|
|
2026-06-22 19:03:37 | INFO | app.core.executor | [11:03:37] Streaming backup to storage key=asset-mgmt-test/2026-06-22/asset-mgmt-test-asset_management-20260622-190337.sql.gz ...
|
|
2026-06-22 19:03:37 | INFO | app.core.backup.mysql | Executing mysqldump for db=asset_management host=10.168.1.209
|
|
2026-06-22 19:03:37 | ERROR | app.core.executor | Backup run_id=13 failed
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/executor.py", line 91, in run_backup
|
|
size, sha = await storage.upload_stream(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/app/app/core/storage/local.py", line 55, in upload_stream
|
|
async for chunk in source:
|
|
File "/app/app/core/executor.py", line 87, in _consume_with_progress
|
|
async for chunk in backup.produce():
|
|
File "/app/app/core/backup/mysql.py", line 101, in produce
|
|
raise RuntimeError(
|
|
RuntimeError: mysqldump failed (exit=7): mysqldump: unknown variable 'ssl-mode=DISABLED'
|
|
2026-06-22 19:03:37 | ERROR | app.core.executor | [11:03:37] Backup failed: RuntimeError: mysqldump failed (exit=7): mysqldump: unknown variable 'ssl-mode=DISABLED'
|
|
2026-06-22 19:03:37 | INFO | app.core.executor | Backup run_id=13 finished status=failed
|
|
2026-06-22 19:04:42 | INFO | app.main | Database tables ensured
|
|
2026-06-22 19:04:42 | INFO | app.main | Existing users found (1), skip admin init
|
|
2026-06-22 19:04:42 | INFO | apscheduler.scheduler | Scheduler started
|
|
2026-06-22 19:04:42 | INFO | app.scheduler.scheduler | Scheduler started
|
|
2026-06-22 19:04:42 | INFO | app.main | Application ready
|
|
2026-06-22 19:04:46 | INFO | app.core.executor | [11:04:46] Backup started: run_id=14 job=asset-mgmt-test trigger=manual
|
|
2026-06-22 19:04:46 | INFO | app.core.executor | [11:04:46] Metadata: filename=asset-mgmt-test-asset_management-20260622-190446.sql.gz content_type=application/gzip
|
|
2026-06-22 19:04:46 | INFO | app.core.executor | [11:04:46] Storage test: ok=True msg=OK: writable /app/data/backups
|
|
2026-06-22 19:04:46 | INFO | app.core.executor | [11:04:46] Streaming backup to storage key=asset-mgmt-test/2026-06-22/asset-mgmt-test-asset_management-20260622-190446.sql.gz ...
|
|
2026-06-22 19:04:46 | INFO | app.core.backup.mysql | Executing mysqldump for db=asset_management host=10.168.1.209
|
|
2026-06-22 19:04:46 | ERROR | app.core.executor | Backup run_id=14 failed
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/executor.py", line 91, in run_backup
|
|
size, sha = await storage.upload_stream(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/app/app/core/storage/local.py", line 55, in upload_stream
|
|
async for chunk in source:
|
|
File "/app/app/core/executor.py", line 87, in _consume_with_progress
|
|
async for chunk in backup.produce():
|
|
File "/app/app/core/backup/mysql.py", line 101, in produce
|
|
raise RuntimeError(
|
|
RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2026: "TLS/SSL error: self-signed certificate in certificate chain" when trying to connect
|
|
2026-06-22 19:04:46 | ERROR | app.core.executor | [11:04:46] Backup failed: RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2026: "TLS/SSL error: self-signed certificate in certificate chain" when trying to connect
|
|
2026-06-22 19:04:46 | INFO | app.core.executor | Backup run_id=14 finished status=failed
|
|
2026-06-22 19:06:06 | INFO | app.core.executor | [11:06:06] Backup started: run_id=15 job=asset-mgmt-test trigger=manual
|
|
2026-06-22 19:06:06 | INFO | app.core.executor | [11:06:06] Metadata: filename=asset-mgmt-test-asset_management-20260622-190606.sql.gz content_type=application/gzip
|
|
2026-06-22 19:06:06 | INFO | app.core.executor | [11:06:06] Storage test: ok=True msg=OK: writable /app/data/backups
|
|
2026-06-22 19:06:06 | INFO | app.core.executor | [11:06:06] Streaming backup to storage key=asset-mgmt-test/2026-06-22/asset-mgmt-test-asset_management-20260622-190606.sql.gz ...
|
|
2026-06-22 19:06:06 | INFO | app.core.backup.mysql | Executing mysqldump for db=asset_management host=10.168.1.209
|
|
2026-06-22 19:06:06 | ERROR | app.core.executor | Backup run_id=15 failed
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/executor.py", line 91, in run_backup
|
|
size, sha = await storage.upload_stream(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/app/app/core/storage/local.py", line 55, in upload_stream
|
|
async for chunk in source:
|
|
File "/app/app/core/executor.py", line 87, in _consume_with_progress
|
|
async for chunk in backup.produce():
|
|
File "/app/app/core/backup/mysql.py", line 101, in produce
|
|
raise RuntimeError(
|
|
RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2026: "TLS/SSL error: self-signed certificate in certificate chain" when trying to connect
|
|
2026-06-22 19:06:06 | ERROR | app.core.executor | [11:06:06] Backup failed: RuntimeError: mysqldump failed (exit=2): mysqldump: Got error: 2026: "TLS/SSL error: self-signed certificate in certificate chain" when trying to connect
|
|
2026-06-22 19:06:06 | INFO | app.core.executor | Backup run_id=15 finished status=failed
|
|
2026-06-22 19:07:37 | INFO | app.main | Database tables ensured
|
|
2026-06-22 19:07:37 | INFO | app.main | Existing users found (1), skip admin init
|
|
2026-06-22 19:07:37 | INFO | apscheduler.scheduler | Scheduler started
|
|
2026-06-22 19:07:37 | INFO | app.scheduler.scheduler | Scheduler started
|
|
2026-06-22 19:07:37 | INFO | app.main | Application ready
|
|
2026-06-22 19:07:41 | INFO | app.core.executor | [11:07:41] Backup started: run_id=16 job=asset-mgmt-test trigger=manual
|
|
2026-06-22 19:07:41 | INFO | app.core.executor | [11:07:41] Metadata: filename=asset-mgmt-test-asset_management-20260622-190741.sql.gz content_type=application/gzip
|
|
2026-06-22 19:07:41 | INFO | app.core.executor | [11:07:41] Storage test: ok=True msg=OK: writable /app/data/backups
|
|
2026-06-22 19:07:41 | INFO | app.core.executor | [11:07:41] Streaming backup to storage key=asset-mgmt-test/2026-06-22/asset-mgmt-test-asset_management-20260622-190741.sql.gz ...
|
|
2026-06-22 19:07:41 | INFO | app.core.backup.mysql | Executing mysqldump for db=asset_management host=10.168.1.209
|
|
2026-06-22 19:07:42 | INFO | app.core.executor | [11:07:42] Backup success: size=762354 bytes sha256=f30fa0971e2c elapsed=0s
|
|
2026-06-22 19:07:42 | INFO | app.core.executor | Backup run_id=16 finished status=success
|
|
2026-06-22 19:10:48 | INFO | app.main | Database tables ensured
|
|
2026-06-22 19:10:48 | INFO | app.main | Existing users found (1), skip admin init
|
|
2026-06-22 19:10:48 | INFO | apscheduler.scheduler | Scheduler started
|
|
2026-06-22 19:10:48 | INFO | app.scheduler.scheduler | Scheduler started
|
|
2026-06-22 19:10:48 | INFO | app.main | Application ready
|
|
2026-06-22 19:13:14 | INFO | app.main | Database tables ensured
|
|
2026-06-22 19:13:14 | INFO | app.main | Existing users found (1), skip admin init
|
|
2026-06-22 19:13:14 | INFO | apscheduler.scheduler | Scheduler started
|
|
2026-06-22 19:13:14 | INFO | app.scheduler.scheduler | Scheduler started
|
|
2026-06-22 19:13:14 | INFO | app.main | Application ready
|
|
2026-06-22 19:13:43 | INFO | app.core.executor | [11:13:43] Backup started: run_id=17 job=influxdb-v2-test trigger=manual
|
|
2026-06-22 19:13:43 | INFO | app.core.executor | [11:13:43] Metadata: filename=influxdb-v2-test-2-my-bucket-20260622-191343.tar.gz content_type=application/gzip
|
|
2026-06-22 19:13:43 | INFO | app.core.executor | [11:13:43] Storage test: ok=True msg=OK: writable /app/data/backups
|
|
2026-06-22 19:13:43 | INFO | app.core.executor | [11:13:43] Streaming backup to storage key=influxdb-v2-test/2026-06-22/influxdb-v2-test-2-my-bucket-20260622-191343.tar.gz ...
|
|
2026-06-22 19:13:43 | INFO | app.core.backup.influxdb | Running: influx backup --bucket my-bucket --org my-org --host http://10.168.1.209:8086 --token *** /tmp/influxbk_influxdb-v2-test_u90psu8e/data
|
|
2026-06-22 19:13:43 | ERROR | app.core.executor | Backup run_id=17 failed
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/executor.py", line 91, in run_backup
|
|
size, sha = await storage.upload_stream(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/app/app/core/storage/local.py", line 55, in upload_stream
|
|
async for chunk in source:
|
|
File "/app/app/core/executor.py", line 87, in _consume_with_progress
|
|
async for chunk in backup.produce():
|
|
File "/app/app/core/backup/influxdb.py", line 65, in produce
|
|
await self._backup_v2(backup_dir)
|
|
File "/app/app/core/backup/influxdb.py", line 111, in _backup_v2
|
|
raise RuntimeError(
|
|
RuntimeError: influx backup failed (exit=1): 2026/06/22 19:13:43 INFO: Downloading metadata snapshot
|
|
Error: failed to backup metadata: failed to download metadata snapshot: 401 Unauthorized: unauthorized access
|
|
|
|
2026-06-22 19:13:43 | ERROR | app.core.executor | [11:13:43] Backup failed: RuntimeError: influx backup failed (exit=1): 2026/06/22 19:13:43 INFO: Downloading metadata snapshot
|
|
Error: failed to backup metadata: failed to download metadata snapshot: 401 Unauthorized: unauthorized access
|
|
|
|
2026-06-22 19:13:43 | INFO | app.core.executor | Backup run_id=17 finished status=failed
|
|
2026-06-22 19:14:07 | INFO | app.core.executor | [11:14:07] Backup started: run_id=18 job=influxdb-v1-test trigger=manual
|
|
2026-06-22 19:14:07 | INFO | app.core.executor | [11:14:07] Metadata: filename=influxdb-v1-test-1-telegraf-20260622-191407.tar.gz content_type=application/gzip
|
|
2026-06-22 19:14:07 | INFO | app.core.executor | [11:14:07] Storage test: ok=True msg=OK: writable /app/data/backups
|
|
2026-06-22 19:14:07 | INFO | app.core.executor | [11:14:07] Streaming backup to storage key=influxdb-v1-test/2026-06-22/influxdb-v1-test-1-telegraf-20260622-191407.tar.gz ...
|
|
2026-06-22 19:14:07 | INFO | app.core.backup.influxdb | InfluxDB v1 backup via HTTP API: db=telegraf host=127.0.0.1:8086
|
|
2026-06-22 19:14:07 | ERROR | app.core.executor | Backup run_id=18 failed
|
|
Traceback (most recent call last):
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 72, in map_httpcore_exceptions
|
|
yield
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 377, in handle_async_request
|
|
resp = await self._pool.handle_async_request(req)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpcore/_async/connection_pool.py", line 256, in handle_async_request
|
|
raise exc from None
|
|
File "/usr/local/lib/python3.11/site-packages/httpcore/_async/connection_pool.py", line 236, in handle_async_request
|
|
response = await connection.handle_async_request(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpcore/_async/connection.py", line 101, in handle_async_request
|
|
raise exc
|
|
File "/usr/local/lib/python3.11/site-packages/httpcore/_async/connection.py", line 78, in handle_async_request
|
|
stream = await self._connect(request)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpcore/_async/connection.py", line 124, in _connect
|
|
stream = await self._network_backend.connect_tcp(**kwargs)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpcore/_backends/auto.py", line 31, in connect_tcp
|
|
return await self._backend.connect_tcp(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 113, in connect_tcp
|
|
with map_exceptions(exc_map):
|
|
File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
|
|
self.gen.throw(typ, value, traceback)
|
|
File "/usr/local/lib/python3.11/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
|
|
raise to_exc(exc) from exc
|
|
httpcore.ConnectError: All connection attempts failed
|
|
|
|
The above exception was the direct cause of the following exception:
|
|
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/backup/influxdb.py", line 143, in _backup_v1
|
|
resp = await client.get(url, params=params)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1814, in get
|
|
return await self.request(
|
|
^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1585, in request
|
|
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1674, in send
|
|
response = await self._send_handling_auth(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1702, in _send_handling_auth
|
|
response = await self._send_handling_redirects(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1739, in _send_handling_redirects
|
|
response = await self._send_single_request(request)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 1776, in _send_single_request
|
|
response = await transport.handle_async_request(request)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 376, in handle_async_request
|
|
with map_httpcore_exceptions():
|
|
File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
|
|
self.gen.throw(typ, value, traceback)
|
|
File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 89, in map_httpcore_exceptions
|
|
raise mapped_exc(message) from exc
|
|
httpx.ConnectError: All connection attempts failed
|
|
|
|
The above exception was the direct cause of the following exception:
|
|
|
|
Traceback (most recent call last):
|
|
File "/app/app/core/executor.py", line 91, in run_backup
|
|
size, sha = await storage.upload_stream(
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "/app/app/core/storage/local.py", line 55, in upload_stream
|
|
async for chunk in source:
|
|
File "/app/app/core/executor.py", line 87, in _consume_with_progress
|
|
async for chunk in backup.produce():
|
|
File "/app/app/core/backup/influxdb.py", line 67, in produce
|
|
await self._backup_v1(backup_dir)
|
|
File "/app/app/core/backup/influxdb.py", line 145, in _backup_v1
|
|
raise RuntimeError(f"InfluxDB v1 HTTP 请求失败: {e}") from e
|
|
RuntimeError: InfluxDB v1 HTTP 请求失败: All connection attempts failed
|
|
2026-06-22 19:14:07 | ERROR | app.core.executor | [11:14:07] Backup failed: RuntimeError: InfluxDB v1 HTTP 请求失败: All connection attempts failed
|
|
2026-06-22 19:14:07 | INFO | app.core.executor | Backup run_id=18 finished status=failed
|