first commit
This commit is contained in:
15
README.md
15
README.md
@@ -1,2 +1,17 @@
|
||||
# mysql_backup
|
||||
|
||||
MySQL backup shell script
|
||||
Feature rich MySQL / MariaDB backup script.
|
||||
|
||||
# Setup password
|
||||
|
||||
Set mysql `user` and `password` to user that execute script using `.my.cnf` in user homedir.
|
||||
|
||||
# .my.cnf example
|
||||
|
||||
```
|
||||
[client]
|
||||
user = mysqldump
|
||||
password = secret_passwd_here_HMnab4sBMmMwtDgvF=qZuuU#gsED9u6J
|
||||
host = localhost
|
||||
```
|
||||
172
mysql_backup.sh
Normal file
172
mysql_backup.sh
Normal file
@@ -0,0 +1,172 @@
|
||||
#!/bin/sh
|
||||
# set mysql user and password to user who dump mysql by .my.cnf in user homedir
|
||||
#
|
||||
# nano /home/mysqldump/.my.cnf
|
||||
# [client]
|
||||
# user = mysqldump
|
||||
# password = secret_passwd_here_HMnab4sBMmMwtDgvF=qZuuU#gsED9u6J
|
||||
# host = localhost
|
||||
#
|
||||
|
||||
export PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" ;
|
||||
|
||||
script="$(basename "$(test -L "${0}" && readlink "${0}" || echo "${0}")")" ;
|
||||
mypidfile="/var/run/`basename ${0}`.pid" ;
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "Usage: mysql_backup.sh -d /var/backup -n daily [-c 10 -s -a -e test@domain.org]"
|
||||
echo
|
||||
echo "-d | --dir :: backup directory"
|
||||
echo "-n | --name :: backup name"
|
||||
echo "-c | --copies :: number of copies to store (default 10)"
|
||||
echo "-e | --email :: notification email"
|
||||
echo "-l | --lock-all-tables"
|
||||
echo "-s | --single-transaction"
|
||||
echo "-a | --archive :: gzip dump"
|
||||
echo "-q | --quiet"
|
||||
echo "-h help"
|
||||
}
|
||||
|
||||
error()
|
||||
{
|
||||
|
||||
echo -e "\033[0;31m${1}\e[00m" ;
|
||||
if ! [ "${email}" = "" ] ; then
|
||||
echo "ERROR: `hostname`, ${script}: ${1}" | mail -s "'ERROR: `hostname`, ${script}: ${1}'" ${email} ;
|
||||
fi
|
||||
}
|
||||
|
||||
while [ "$1" != "" ]; do
|
||||
case $1 in
|
||||
-d | --dir ) shift
|
||||
dir=$1
|
||||
;;
|
||||
-n | --name ) shift
|
||||
name=$1
|
||||
;;
|
||||
-c | --copies ) shift
|
||||
copies=$1
|
||||
;;
|
||||
-e | --email ) shift
|
||||
email=$1
|
||||
;;
|
||||
-l | --lock-all-tables ) lock=1
|
||||
;;
|
||||
-s | --single-transaction ) singletrans=1
|
||||
;;
|
||||
-a | --archive ) archive=1
|
||||
;;
|
||||
-q | --quiet ) quiet=1
|
||||
;;
|
||||
-h | --help ) usage
|
||||
exit
|
||||
;;
|
||||
* ) usage
|
||||
exit 1
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ "${dir}" = "" ] ;
|
||||
then
|
||||
usage ;
|
||||
error "Backup dir is not set!"
|
||||
exit 1 ;
|
||||
fi
|
||||
|
||||
if [ "${name}" = "" ] ;
|
||||
then
|
||||
usage ;
|
||||
error "Name of backup is not set!"
|
||||
exit 1 ;
|
||||
fi
|
||||
|
||||
if [ "${copies}" = "" ] || [ ! -n "${copies}" ] || [ "${copies}" -le "0" ] ;
|
||||
then
|
||||
copies=10
|
||||
fi
|
||||
|
||||
|
||||
if ! [ -d ${dir} ] ; then
|
||||
|
||||
error "Directory '${dir}' does not exists!" ;
|
||||
exit 1 ;
|
||||
fi
|
||||
|
||||
if [ -s ${mypidfile} ] ; then
|
||||
error "ERROR: `hostname` script ${script} already running!" ;
|
||||
exit 1 ;
|
||||
fi
|
||||
|
||||
trap "rm -f ${mypidfile} ;" EXIT INT KILL TERM SIGKILL SIGTERM;
|
||||
|
||||
echo $$ > ${mypidfile} ;
|
||||
|
||||
mysqlparams=" --all-databases \
|
||||
--add-drop-database \
|
||||
--add-drop-table \
|
||||
--add-drop-trigger \
|
||||
--add-locks \
|
||||
--compact \
|
||||
--disable-keys \
|
||||
--apply-slave-statements \
|
||||
--allow-keywords \
|
||||
--complete-insert \
|
||||
--create-options \
|
||||
--default-character-set=UTF8 \
|
||||
--dump-date \
|
||||
--events \
|
||||
--extended-insert \
|
||||
--flush-privileges \
|
||||
--master-data \
|
||||
--include-master-host-port \
|
||||
--order-by-primary \
|
||||
--quick \
|
||||
--quote-names \
|
||||
--routines \
|
||||
--triggers \
|
||||
--force \
|
||||
--max-allowed-packet=512M
|
||||
--log-error=/var/log/mysqldump.log" ;
|
||||
|
||||
if [ "${singletrans}" ] ; then
|
||||
mysqlparams="${mysqlparams} --single-transaction" ;
|
||||
fi
|
||||
|
||||
if [ "${lock}" ] ; then
|
||||
mysqlparams="${mysqlparams} --lock-all-tables" ;
|
||||
fi
|
||||
|
||||
if [ `ls ${dir} | grep mysqldump.daily | wc -l` -ge "${copies}" ] ; then
|
||||
i=1;
|
||||
for filename in `ls ${dir} | grep mysqldump.daily. | sort -r` ; do
|
||||
if [ "${i}" -ge "${copies}" ] ; then
|
||||
rm "${dir}/${filename}" ;
|
||||
fi
|
||||
i=$(expr $i + 1)
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ! "${quiet}" ] ; then
|
||||
echo "Starting database dump (`date +\"%Y-%m-%d %H:%M:%S\"`)" ;
|
||||
fi
|
||||
|
||||
date=`date +"%y%m%d.%H%M%S"` ;
|
||||
|
||||
dump_file_name="${dir}/mysqldump.${name}.${date}.sql" ;
|
||||
|
||||
mysqldump ${mysqlparams} > ${dump_file_name} ;
|
||||
|
||||
if [ "${archive}" ] ; then
|
||||
|
||||
if [ ! "${quiet}" ] ; then
|
||||
echo "Archiving dump (`date +\"%Y-%m-%d %H:%M:%S\"`)..." ;
|
||||
fi
|
||||
|
||||
gzip ${dump_file_name} ;
|
||||
fi
|
||||
|
||||
rm -f ${mypidfile} ;
|
||||
|
||||
exit 0 ;
|
||||
Reference in New Issue
Block a user