From a8c9c2252ffe4a924934f9d167f74f0ef0ba906e Mon Sep 17 00:00:00 2001 From: Hera Zhao Date: Wed, 15 Apr 2026 09:56:40 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20hourly-backup=20=E6=94=B9=E7=94=A8=20pyt?= =?UTF-8?q?hon=20sqlite3=20API=20=E5=81=9A=E4=B8=80=E8=87=B4=E6=80=A7?= =?UTF-8?q?=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 镜像里没有 sqlite3 CLI,原来的 .backup 命令 15 天前就静默失败了。 daily-minio-backup 用 cp 就够,但 hourly 每小时跑要求更强一致性, 改用 Python 内置 sqlite3 的 .backup() API。 Co-Authored-By: Claude Opus 4.6 (1M context) --- deploy/backup-cronjob.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/deploy/backup-cronjob.yaml b/deploy/backup-cronjob.yaml index 64ee0ab..30d81af 100644 --- a/deploy/backup-cronjob.yaml +++ b/deploy/backup-cronjob.yaml @@ -18,12 +18,14 @@ spec: - sh - -c - | + set -e BACKUP_DIR=/data/backups mkdir -p $BACKUP_DIR DATE=$(date +%Y%m%d_%H%M%S) - # Backup SQLite database using .backup for consistency - sqlite3 /data/oil_calculator.db ".backup '$BACKUP_DIR/oil_calculator_${DATE}.db'" - echo "Backup done: $BACKUP_DIR/oil_calculator_${DATE}.db ($(du -h $BACKUP_DIR/oil_calculator_${DATE}.db | cut -f1))" + DST="$BACKUP_DIR/oil_calculator_${DATE}.db" + # Consistent snapshot via Python's sqlite3 .backup API (sqlite3 CLI not in image) + python3 -c "import sqlite3; s=sqlite3.connect('/data/oil_calculator.db'); d=sqlite3.connect('$DST'); s.backup(d); d.close(); s.close()" + echo "Backup done: $DST ($(du -h $DST | cut -f1))" # Keep last 48 backups (2 days of hourly) ls -t $BACKUP_DIR/oil_calculator_*.db | tail -n +49 | xargs rm -f 2>/dev/null echo "Backups retained: $(ls $BACKUP_DIR/oil_calculator_*.db | wc -l)"