Skip to content

Commit b7188da

Browse files
committed
fixed rotating and directory creation issues
- Removed redunant file paths - Fixed issue with rotating daily backups possibly effecting weekly and monthly folders - Fixed issue causing /<database>/ directory to be created even if the database did not exist
1 parent 46a6bca commit b7188da

File tree

1 file changed

+35
-38
lines changed

1 file changed

+35
-38
lines changed

mysqlbackup-plus.sh

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
## MySQLBackupPlus - A powerful and flexible MySQL backup tool
44
## Copyright (C) 2025 Qcybb.com
55
## GitHub Repo: https://github.com/qcybb/mysqlbackup-plus
6-
## Version: 1.2
6+
## Version: 1.2.1
77
## Last Updated: 2025-05-25
88

9-
SCRIPT_VER="1.2"
9+
SCRIPT_VER="1.2.1"
1010

1111

1212
# START CONFIGURATION SETTINGS
@@ -268,27 +268,51 @@ for DB_ENTRY in $DATABASES; do
268268
DB_NAME=$(echo "$DB_ENTRY" | cut -d':' -f1)
269269
TABLES=$(echo "$DB_ENTRY" | cut -d':' -f2)
270270

271+
DAILY_PATH="$BACKUP_DIR/daily/$DB_NAME"
272+
WEEKLY_PATH="$BACKUP_DIR/weekly/$DB_NAME"
273+
MONTHLY_PATH="$BACKUP_DIR/monthly/$DB_NAME"
274+
271275
printf "\n----------------------------------------\n"
272276
printf "[$(date +"%I:%M:%S %p")] Processing %s...\n" "$DB_NAME"
273277

274278
if [ "$TABLES" != "$DB_NAME" ]; then
275279
# Table-level backups
276280
for TABLE in $(echo "$TABLES" | tr ',' ' '); do
277-
DAILY_PATH="$BACKUP_DIR/daily/$DB_NAME"
278-
WEEKLY_PATH="$BACKUP_DIR/weekly/$DB_NAME"
279-
MONTHLY_PATH="$BACKUP_DIR/monthly/$DB_NAME"
280-
281-
[ ! -d "$DAILY_PATH" ] && mkdir -p "$DAILY_PATH"
282-
283-
OUTPUT_FILE="$DAILY_PATH/${TABLE}_$BACKUP_DATE$EXT"
284-
285281
if mysql --defaults-file="$HOME/.my.cnf" -e "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='$DB_NAME' AND TABLE_NAME='$TABLE'" | grep -q "$TABLE"; then
282+
[ ! -d "$DAILY_PATH" ] && mkdir -p "$DAILY_PATH"
283+
284+
OUTPUT_FILE="$DAILY_PATH/${TABLE}_$BACKUP_DATE$EXT"
286285
$MYSQLDUMP --defaults-file="$HOME/.my.cnf" "$DB_NAME" "$TABLE" | $COMPRESS_CMD > "$OUTPUT_FILE"
286+
287287
printf "\n - Table: $TABLE\n"
288288
printf " -> Saved to: ${BACKUP_DIR}/daily/${DB_NAME}/${TABLE}_${BACKUP_DATE}${EXT}\n"
289+
290+
if [ "$BACKUP_WEEKLY" = "YES" ] && [ "$CURRENT_WEEKDAY" -eq "$WEEKLY_BACKUP_DAY" ]; then
291+
[ ! -d "$WEEKLY_PATH" ] && mkdir -p "$WEEKLY_PATH"
292+
cp "$OUTPUT_FILE" "$WEEKLY_PATH/"
293+
printf " -> Copied to: $WEEKLY_PATH/\n"
294+
fi
295+
296+
if [ "$BACKUP_MONTHLY" = "YES" ] && [ "$CURRENT_MONTHDAY" -eq "$MONTHLY_BACKUP_DAY" ]; then
297+
[ ! -d "$MONTHLY_PATH" ] && mkdir -p "$MONTHLY_PATH"
298+
cp "$OUTPUT_FILE" "$MONTHLY_PATH/"
299+
printf " -> Copied to: $MONTHLY_PATH/\n"
300+
fi
289301
else
290302
printf "\nError: Table '$TABLE' in database '$DB_NAME' does not exist.\n"
291303
fi
304+
done
305+
else
306+
# Full DB backup
307+
if mysql --defaults-file="$HOME/.my.cnf" -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='$DB_NAME'" | grep -q "$DB_NAME"; then
308+
[ ! -d "$DAILY_PATH" ] && mkdir -p "$DAILY_PATH"
309+
310+
OUTPUT_FILE="$DAILY_PATH/${DB_NAME}_$BACKUP_DATE$EXT"
311+
$MYSQLDUMP --defaults-file="$HOME/.my.cnf" "$DB_NAME" | $COMPRESS_CMD > "$OUTPUT_FILE"
312+
313+
printf "\n - Full Database\n"
314+
printf " -> Saved to: ${BACKUP_DIR}/daily/${DB_NAME}/${DB_NAME}_${BACKUP_DATE}${EXT}\n"
315+
292316

293317
if [ "$BACKUP_WEEKLY" = "YES" ] && [ "$CURRENT_WEEKDAY" -eq "$WEEKLY_BACKUP_DAY" ]; then
294318
[ ! -d "$WEEKLY_PATH" ] && mkdir -p "$WEEKLY_PATH"
@@ -301,36 +325,9 @@ for DB_ENTRY in $DATABASES; do
301325
cp "$OUTPUT_FILE" "$MONTHLY_PATH/"
302326
printf " -> Copied to: $MONTHLY_PATH/\n"
303327
fi
304-
done
305-
else
306-
# Full DB backup
307-
DAILY_PATH="$BACKUP_DIR/daily/$DB_NAME"
308-
WEEKLY_PATH="$BACKUP_DIR/weekly/$DB_NAME"
309-
MONTHLY_PATH="$BACKUP_DIR/monthly/$DB_NAME"
310-
311-
[ ! -d "$DAILY_PATH" ] && mkdir -p "$DAILY_PATH"
312-
313-
OUTPUT_FILE="$DAILY_PATH/${DB_NAME}_$BACKUP_DATE$EXT"
314-
315-
if mysql --defaults-file="$HOME/.my.cnf" -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='$DB_NAME'" | grep -q "$DB_NAME"; then
316-
$MYSQLDUMP --defaults-file="$HOME/.my.cnf" "$DB_NAME" | $COMPRESS_CMD > "$OUTPUT_FILE"
317-
printf "\n - Full Database\n"
318-
printf " -> Saved to: ${BACKUP_DIR}/daily/${DB_NAME}/${DB_NAME}_${BACKUP_DATE}${EXT}\n"
319328
else
320329
printf "\nError: Database '$DB_NAME' does not exist.\n"
321330
fi
322-
323-
if [ "$BACKUP_WEEKLY" = "YES" ] && [ "$CURRENT_WEEKDAY" -eq "$WEEKLY_BACKUP_DAY" ]; then
324-
[ ! -d "$WEEKLY_PATH" ] && mkdir -p "$WEEKLY_PATH"
325-
cp "$OUTPUT_FILE" "$WEEKLY_PATH/"
326-
printf " -> Copied to: $WEEKLY_PATH/\n"
327-
fi
328-
329-
if [ "$BACKUP_MONTHLY" = "YES" ] && [ "$CURRENT_MONTHDAY" -eq "$MONTHLY_BACKUP_DAY" ]; then
330-
[ ! -d "$MONTHLY_PATH" ] && mkdir -p "$MONTHLY_PATH"
331-
cp "$OUTPUT_FILE" "$MONTHLY_PATH/"
332-
printf " -> Copied to: $MONTHLY_PATH/\n"
333-
fi
334331
fi
335332
printf "%s\n" "----------------------------------------"
336333
done
@@ -340,7 +337,7 @@ if [ "$ROTATE_DAYS" -gt 0 ]; then
340337
DELETED_FILES=$(find "$BACKUP_DIR/daily" -type f -mtime +"$ROTATE_DAYS" -print)
341338

342339
if [ -n "$DELETED_FILES" ]; then
343-
find "$BACKUP_DIR" -type f -mtime +"$ROTATE_DAYS" -exec rm "{}" \;
340+
find "$BACKUP_DIR/daily" -type f -mtime +"$ROTATE_DAYS" -exec rm "{}" \;
344341

345342
UNIT="day"
346343
[ "$ROTATE_DAYS" -gt 1 ] && UNIT="days"

0 commit comments

Comments
 (0)