add old backup expiration. improve formatting

master
Harold Paulson 2020-10-11 20:56:06 -07:00
parent 2b56a001c9
commit a7c4c23235
2 changed files with 36 additions and 18 deletions

View File

@ -15,4 +15,3 @@ save nightly mysql database dumps
## To Do ## To Do
1. Expire old logs

View File

@ -3,41 +3,60 @@
# This script will backup all mysql databases into # This script will backup all mysql databases into
# compressed file named after date, ie: /var/backup/mysql/2016-07-13.tar.gz # compressed file named after date, ie: /var/backup/mysql/2016-07-13.tar.gz
# Setup variables used later
# Create date suffix with "F"ull date format # Create date suffix with "F"ull date format
suffix=$(date +%F) SUFFIX=$(date +%F)
# Retrieve all database names except information schemas. # Retrieve all database names except information schemas.
dbs=$(/usr/local/bin/mysql --defaults-extra-file=/root/.my.cnf --batch --skip-column-names -e "SHOW DATABASES;" | grep -E -v "(information|performance)_schema") DBS=$(/usr/local/bin/mysql \
--defaults-extra-file=/root/.my.cnf \
--batch \
--skip-column-names \
-e "SHOW DATABASES;" \
| grep -E -v "(information|performance)_schema")
# Create temporary directory with "-d" option # Create temporary directory with "-d" option
tmp=$(mktemp -d) TMP_DIR=$(mktemp -d)
# Set output dir here. /var/backups/ is used by system, # Set output dir here. /var/backups/ is used by system,
# so intentionally used /var/backup/ for user backups. # so intentionally used /var/backup/ for user backups.
outDir="/var/backup/mysql" OUT_DIR="/var/backup/mysql"
# Create output file name
out="$outDir/$suffix.tar.gz" # Create output file name
OUT_FILE="$OUT_DIR/$SUFFIX.tar.gz"
# Number of days to save backups
SAVE_DAYS=180
# Actual script
# Check if output directory exists # Check if output directory exists
if [ ! -d "$outDir" ];then if [ ! -d "$OUT_DIR" ];then
# Create directory with parent ("-p" option) directories # Create directory with parent ("-p" option) directories
mkdir -p "$outDir" mkdir -p "$OUT_DIR"
fi fi
# Loop through all databases # Loop through all databases
for db in $dbs; do for DB in $DBS; do
# Dump database to temporary directory with file name same as database name + sql suffix # Dump database to temporary directory with file name same as database name + sql suffix
/usr/local/bin/mysqldump --defaults-extra-file=/root/.my.cnf --events --triggers --routines --set-gtid-purged=OFF --databases "$db" > "$tmp/$db.sql" /usr/local/bin/mysqldump \
--defaults-extra-file=/root/.my.cnf \
--events \
--triggers \
--routines \
--set-gtid-purged=OFF \
--databases "$DB" \
> "$TMP_DIR/$DB.sql"
done done
# Go to tmp dir # Go to tmp dir
cd $tmp cd $TMP_DIR
# Compress all dumps with gzip, discard any output to /dev/null # Compress all dumps with gzip, discard any output to /dev/null
tar -zcf "$out" * > "/dev/null" tar -zcf "$OUT_FILE" * > "/dev/null"
# Cleanup # Cleanup
cd "/tmp/" cd "/tmp/"
rm -rf "$tmp" rm -rf "$TMP_DIR"
# Expire old backups
find ${OUT_DIR} -mtime +${SAVE_DAYS} -type f -delete