fix: 备份/恢复脚本统一用 better-sqlite3 替代 sqlite3 CLI
容器内没有 sqlite3 CLI(Alpine 基础镜像),统一改为 docker exec node -e 调用 better-sqlite3 执行 checkpoint 和验证。
This commit is contained in:
parent
7c213873bb
commit
cb0424c896
|
|
@ -12,9 +12,10 @@ log() { echo "[$(date '+%H:%M:%S')] $1"; }
|
|||
log "开始备份云端数据库..."
|
||||
|
||||
# 备份前执行 WAL checkpoint,确保数据全部合并到 .db 主文件
|
||||
log "执行 WAL checkpoint..."
|
||||
ssh txjp "docker exec assets-ai sqlite3 /app/data/assets.db 'PRAGMA wal_checkpoint(TRUNCATE)' && \
|
||||
docker exec issue-ai sqlite3 /app/data/issue.db 'PRAGMA wal_checkpoint(TRUNCATE)'"
|
||||
log "执行 WAL checkpoint (assets)..."
|
||||
ssh txjp "docker exec assets-ai node -e \"const D=require('better-sqlite3');const db=new D('/app/data/assets.db');db.pragma('wal_checkpoint(TRUNCATE)');db.close();\""
|
||||
log "执行 WAL checkpoint (issue)..."
|
||||
ssh txjp "docker exec issue-ai node -e \"const D=require('better-sqlite3');const db=new D('/app/data/issue.db');db.pragma('wal_checkpoint(TRUNCATE)');db.close();\""
|
||||
|
||||
# 云端打包
|
||||
ssh txjp "mkdir -p /tmp/db-backup && \
|
||||
|
|
|
|||
|
|
@ -155,9 +155,9 @@ restore_cloud() {
|
|||
exit 1
|
||||
fi
|
||||
|
||||
# 2. 验证备份文件(通过临时容器,避免依赖宿主机 sqlite3)
|
||||
# 2. 验证备份文件(通过容器内 better-sqlite3,避免依赖宿主机或容器内 sqlite3 CLI)
|
||||
if ! ssh txjp "docker cp ${BACKUP_PATH} ${CONTAINER}:/tmp/restore-check.db 2>/dev/null && \
|
||||
docker exec ${CONTAINER} sqlite3 /tmp/restore-check.db 'SELECT count(*) FROM sqlite_master' > /dev/null 2>&1 && \
|
||||
docker exec ${CONTAINER} node -e \"const D=require('better-sqlite3');const db=new D('/tmp/restore-check.db',{readonly:true});console.log(db.prepare('SELECT count(*) as c FROM sqlite_master').get().c);db.close();\" > /dev/null 2>&1 && \
|
||||
docker exec ${CONTAINER} rm /tmp/restore-check.db"; then
|
||||
echo "[错误] 备份文件不是有效的 SQLite 数据库"
|
||||
exit 1
|
||||
|
|
|
|||
Loading…
Reference in New Issue