@@ -42,6 +42,10 @@ INTERACTIVE CONTROLS:
42
42
Enter Select file
43
43
q Quit
44
44
45
+ NOTE:
46
+ If a local backup file already exists, it will be used instead of downloading.
47
+ To use a fresh copy, delete the local file first.
48
+
45
49
EXAMPLES:
46
50
export BENDSQL_DSN="http://username:password@localhost:8000/database"
47
51
@@ -50,6 +54,9 @@ EXAMPLES:
50
54
51
55
# Quick: Restore specific date
52
56
$0 --stage my_backup_stage 20250109
57
+
58
+ # To use fresh copy, delete local file first
59
+ rm data_2025-01-09.tar.gz && $0 --stage my_backup_stage 20250109
53
60
EOF
54
61
}
55
62
@@ -298,29 +305,45 @@ else
298
305
log " Source stage: @${STAGE} , Target file: ${TAR_FILE} "
299
306
fi
300
307
301
- # Step 1: Generate download URL
302
- log_step " 1" " 6" " Generating presigned download URL for @${STAGE} /${TAR_FILE} "
303
- DOWNLOAD_SQL=" PRESIGN DOWNLOAD @${STAGE} /${TAR_FILE} "
304
- DOWNLOAD_URL=$( bendsql --dsn " ${DSN} " --query=" ${DOWNLOAD_SQL} " | awk ' {print $3}' )
308
+ # Check if local file exists
309
+ LOCAL_TAR_FILE=$( basename " $TAR_FILE " )
310
+ USE_LOCAL_FILE=false
305
311
306
- if [[ -z " $DOWNLOAD_URL " ]]; then
307
- log_error " Failed to generate download URL for ${TAR_FILE} "
308
- exit 1
312
+ if [[ -f " ${LOCAL_TAR_FILE} " && -s " ${LOCAL_TAR_FILE} " ]]; then
313
+ FILE_SIZE=$( du -h " ${LOCAL_TAR_FILE} " | cut -f1)
314
+ log " Local file ${LOCAL_TAR_FILE} exists (${FILE_SIZE} ) - using local copy"
315
+ USE_LOCAL_FILE=true
309
316
fi
310
- log " Download URL generated successfully"
311
317
312
- # Step 2: Download backup
313
- log_step " 2" " 6" " Downloading ${TAR_FILE} from stage @${STAGE} "
314
- LOCAL_TAR_FILE=$( basename " $TAR_FILE " )
315
- curl -s -o " ${LOCAL_TAR_FILE} " " ${DOWNLOAD_URL} "
318
+ # Step 1 & 2: Download or use local file
319
+ if [[ " $USE_LOCAL_FILE " = true ]]; then
320
+ log_step " 1" " 6" " Using existing local file: ${LOCAL_TAR_FILE} "
321
+ FILE_SIZE=$( du -h " ${LOCAL_TAR_FILE} " | cut -f1)
322
+ log " Using local file ${LOCAL_TAR_FILE} (${FILE_SIZE} )"
323
+ else
324
+ # Step 1: Generate download URL
325
+ log_step " 1" " 6" " Generating presigned download URL for @${STAGE} /${TAR_FILE} "
326
+ DOWNLOAD_SQL=" PRESIGN DOWNLOAD @${STAGE} /${TAR_FILE} "
327
+ DOWNLOAD_URL=$( bendsql --dsn " ${DSN} " --query=" ${DOWNLOAD_SQL} " | awk ' {print $3}' )
316
328
317
- if [[ ! -f " ${LOCAL_TAR_FILE} " ]]; then
318
- log_error " Failed to download ${TAR_FILE} "
319
- exit 1
320
- fi
329
+ if [[ -z " $DOWNLOAD_URL " ]]; then
330
+ log_error " Failed to generate download URL for ${TAR_FILE} "
331
+ exit 1
332
+ fi
333
+ log " Download URL generated successfully"
321
334
322
- FILE_SIZE=$( du -h " ${LOCAL_TAR_FILE} " | cut -f1)
323
- log " Downloaded ${TAR_FILE} successfully (${FILE_SIZE} )"
335
+ # Step 2: Download backup
336
+ log_step " 2" " 6" " Downloading ${TAR_FILE} from stage @${STAGE} "
337
+ curl -s -o " ${LOCAL_TAR_FILE} " " ${DOWNLOAD_URL} "
338
+
339
+ if [[ ! -f " ${LOCAL_TAR_FILE} " ]]; then
340
+ log_error " Failed to download ${TAR_FILE} "
341
+ exit 1
342
+ fi
343
+
344
+ FILE_SIZE=$( du -h " ${LOCAL_TAR_FILE} " | cut -f1)
345
+ log " Downloaded ${TAR_FILE} successfully (${FILE_SIZE} )"
346
+ fi
324
347
325
348
# Step 3: Extract archive
326
349
log_step " 3" " 6" " Extracting ${LOCAL_TAR_FILE} to temporary directory"
@@ -396,9 +419,10 @@ done
396
419
echo # New line after progress
397
420
log " Upload completed: ${UPLOAD_SUCCESS} successful, ${UPLOAD_FAILED} failed"
398
421
399
- # Cleanup
400
- log " Cleaning up: removing ${TEMP_DIR} and ${LOCAL_TAR_FILE} "
401
- rm -rf " ${TEMP_DIR} " " ${LOCAL_TAR_FILE} "
422
+ # Cleanup temporary directory (keep local tar file for reuse)
423
+ log " Cleaning up: removing temporary directory ${TEMP_DIR} "
424
+ rm -rf " ${TEMP_DIR} "
425
+ log " Local file ${LOCAL_TAR_FILE} retained for future use"
402
426
403
427
# Step 6: Restore database
404
428
RESTORE_DATABASE=" ${STAGE} _${YEAR} _${MONTH} _${DAY} "
0 commit comments