Skip to content

Instantly share code, notes, and snippets.

@Jamp
Last active May 12, 2017 19:48
Show Gist options
  • Save Jamp/96cebe19db9c0755bb588f8778cf009a to your computer and use it in GitHub Desktop.
Save Jamp/96cebe19db9c0755bb588f8778cf009a to your computer and use it in GitHub Desktop.
Backup one to one database with check
#!/bin/bash
#
# For create user `GRANT LOCK TABLES, SELECT ON DATABASE.* TO 'BACKUPUSER'@'%' IDENTIFIED BY 'PASSWORD';`
#
#### MySQL CREDENTIAL ###
HOST='localhost'
USER='root'
PASSWD=''
DBS='db01 db02 db03' # Databases separated by spaces
BACKUPDIRECTORY='/tmp/' # Ex: /tmp/
EMAIL='[email protected]'
#### MySQL CREDENTIAL ###
basesize=800 # Base size compare 785 normal to mysqldump
d=$(date +%Y-%m-%d_%H%M%S)
echo $(date +%Y-%m-%d' '%H:%M:%S)' Starting backup on '$HOST
echo $(date +%Y-%m-%d' '%H:%M:%S)' Starting backup on '$HOST >> backup_$d.log
echo $(date +%Y-%m-%d' '%H:%M:%S)' Saving on '$BACKUPDIRECTORY
echo $(date +%Y-%m-%d' '%H:%M:%S)' Saving on '$BACKUPDIRECTORY >> backup_$d.log
# create dump file by database with date
for DB in $DBS
do
filename=$DB'_'$d'.sql.gz'
path=$BACKUPDIRECTORY$filename
echo $(date +%Y-%m-%d' '%H:%M:%S)" Init "$filename
echo $(date +%Y-%m-%d' '%H:%M:%S)" Init "$filename >> backup_$d.log
(mysqldump -h $HOST -u $USER --password=$PASSWD $DB | gzip > $path) 2> error_$d.log
size=$(cat $path | wc -c)
# check file dump is valid
if [ $size -lt $basesize ]; then
echo $(date +%Y-%m-%d' '%H:%M:%S)" * "$filename" failed *"
echo $(date +%Y-%m-%d' '%H:%M:%S)" * "$filename" failed *" >> backup_$d.log
rm -f $path
else
echo $(date +%Y-%m-%d' '%H:%M:%S)" - "$filename" ready"
echo $(date +%Y-%m-%d' '%H:%M:%S)" - "$filename" ready" >> backup_$d.log
fi
done
echo $(date +%Y-%m-%d' '%H:%M:%S)' Finish backup'
echo $(date +%Y-%m-%d' '%H:%M:%S)' Finish backup' >> backup_$d.log
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment