Operations 3 min read

Shell Scripts for MySQL Database Backup and Nginx Daily Log Rotation

This article presents two Bash scripts that automate MySQL multi‑database backups with per‑table dumps and rotate Nginx access logs daily by moving them into month‑based directories and signaling Nginx to reopen its logs.

Practical DevOps Architecture
Practical DevOps Architecture
Practical DevOps Architecture
Shell Scripts for MySQL Database Backup and Nginx Daily Log Rotation

This article provides two practical Bash scripts for automating routine server maintenance tasks.

The first script performs a multi‑cycle backup of all non‑system MySQL databases, creating timestamped directories for each database and dumping each table to an individual .sql file, with error handling for failed dumps.

#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
HOST=localhost
USER=backup
PASS=123.com
BACKUP_DIR=/data/db_backup
DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null | egrep -v "Database|information_schema|mysql|performance_schema|sys")
for DB in $DB_LIST; do
  BACKUP_DB_DIR=$BACKUP_DIR/${DB}_${DATE}
  [ ! -d $BACKUP_DB_DIR ] && mkdir -p $BACKUP_DB_DIR >/dev/null
  TABLE_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "use $DB;show tables;" 2>/dev/null)
  for TABLE in $TABLE_LIST; do
    BACKUP_NAME=$BACKUP_DB_DIR/${TABLE}.sql
    if ! mysqldump -h$HOST -u$USER -p$PASS $DB $TABLE > $BACKUP_NAME 2>/dev/null; then
      echo "$BACKUP_NAME 备份失败!"
    fi
  done
done

The second script rotates Nginx access logs by moving the previous day's log file into a month‑based directory and signals Nginx to reopen its logs.

#!/bin/bash
LOG_DIR=/usr/local/nginx/logs
YESTERDAY_TIME=$(date -d "yesterday" +%F)
LOG_MONTH_DIR=$LOG_DIR/$(date +"%Y-%m")
LOG_FILE_LIST="default.access.log"
for LOG_FILE in $LOG_FILE_LIST; do
  [ ! -d $LOG_MONTH_DIR ] && mkdir -p $LOG_MONTH_DIR
  mv $LOG_DIR/$LOG_FILE $LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME}
done
kill -USR1 $(cat /var/run/nginx.pid)
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

automationmysqlNginxShell scriptinglog rotation
Practical DevOps Architecture
Written by

Practical DevOps Architecture

Hands‑on DevOps operations using Docker, K8s, Jenkins, and Ansible—empowering ops professionals to grow together through sharing, discussion, knowledge consolidation, and continuous improvement.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.