#!/bin/bash _MSG="MySql backup [$SECONDS s]: started" && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi # Check if config file is specified, if it exists and if it's readable if [[ $1 == "" ]] ; then _MSG="MySql backup [$SECONDS s]: No host file specified. Exiting." && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi && exit else if [[ ! -e $1 ]] ; then _MSG="MySql backup [$SECONDS s]: File $1 doesn't exist. Exiting..." && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi && exit else if [[ ! -r $1 ]] ; then _MSG="MySql backup [$SECONDS s]: FIle $1 isn't readable. Exiting..." && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi && exit else _MSG="MySql backup [$SECONDS s]: Using $1 config file." && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi fi fi fi # Check if backup type id specified and generate filename depending on backup type _dow="$(date +'%u')" _dom="$(date +'%d')" _moy="$(date +'%m')" _hod="$(date +'%H')" _yr="$(date +'%G')" case "$2" in "--hourly") _of="-hourly-$_hod.sql.gz" ;; "--daily") _of="-daily-$_dow.sql.gz" ;; "--monthly") _of="-monthly-$_moy.sql.gz" ;; "--yearly") _of="-yearly-$_yr.sql.gz" ;; "") _MSG="MySql backup [$SECONDS s]: Backup type not specified. Exiting..." && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi && exit ;; *) _MSG="MySql backup [$SECONDS s]: Unknown backup type. Exiting..." && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi && exit ;; esac # Check if path is specified and add a trailing / if needed if [[ $3 != "" ]] ; then tmp=$3 _lc="$((${#tmp}-1))" _lc="${tmp:$_lc:1}" if [[ $_lc != "/" ]] ; then _od="$3/" else _od="$3" fi else _od="./" fi _MSG="MySql backup [$SECONDS s]: Backup directory set to $_od" && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi # Check if specified path exists if [ ! -d "$_od" ] ; then _MSG="MySql backup [$SECONDS s]: Directory doesn't exist. Exiting..." && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi && exit fi # List all databases databases=`mysql --defaults-extra-file=$1 --batch --skip-column-names -e "SHOW DATABASES;" | grep -E -v "(information|performance)_schema"` # Loop through databases and dump them for db in $databases; do if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] && [[ "$db" != "sys" ]] ; then _MSG="MySql backup [$SECONDS s]: Dumping database: $db" && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi mysqldump --defaults-extra-file=$1 --databases $db --routines | gzip > "$_od$db$_of" fi done _MSG="MySql backup [$SECONDS s]: Stop." && if [[ $RUN_BY_CRON!="TRUE" ]] ; then echo "$_MSG"; else logger "$_MSG"; fi if [[ $RUN_BY_CRON!="TRUE" ]] ; then times; fi