#!/bin/bash DIR_PATH=${1} DIR=$(/usr/bin/basename ${DIR_PATH}) LOG="${DIR}-backup.log" TIMESTAMP=$(/usr/bin/date +%Y/%m/%d' '%H:%M:%S) # # show to screen also and write to file # function log() { echo -e "\e[96m`date +'%d/%m/%Y %H:%M:%S'`\e[39m ${1}" echo -e "`date +'%d/%m/%Y %H:%M:%S'` ${1}" >> $LOG } # # database - get credentials # function get_db_credentials() { SETTINGS=$(find ${DIR} -name settings.php | grep default) DATABASE=$(cat $SETTINGS | tr -d ' ' | grep "^'database'" | awk -F\' '{print $4}') USERNAME=$(cat $SETTINGS | tr -d ' ' | grep "^'username'" | awk -F\' '{print $4}') PASSWORD=$(cat $SETTINGS | tr -d ' ' | grep "^'password'" | awk -F\' '{print $4}') [[ -z "${SETTINGS}" ]] && log "Empty variable SETTINGS" && return 1 [[ -z "${DATABASE}" ]] && log "Empty variable DATABASE" && return 1 [[ -z "${USERNAME}" ]] && log "Empty variable USERNAME" && return 1 [[ -z "${PASSWORD}" ]] && log "Empty variable PASSWORD" && return 1 log "SETTINGS: ${SETTINGS}" log "DATABASE: ${DATABASE}" log "USERNAME: ${USERNAME}" log "PASSWORD: ${PASSWORD}" return 0 } # # database - verify credentials # function verify_db_credentials() { mysql -u"${USERNAME}" -p"${PASSWORD}" --batch --skip-column-names -e "SHOW DATABASES;" | grep "${DATABASE}" > /dev/null; if [ $? -ne 0 ];then log "Verify database credentials [FAIL]" return 1 fi log "Verify database credentials [ OK ]" return 0 } # # database - export data # function export_db() { mysqldump -u"${USERNAME}" -p"${PASSWORD}" ${DATABASE} > ${DATABASE}.sql if [ $? -ne 0 ];then log "Export database [FAIL]" return 1 fi log "Export database [ OK ]" return 0 } # # Check the path # function check_path() { [ ! -d ${DIR} ] && log "${TIMESTAMP} ${DIR} does not exist" && return 1 [ ! -f ${DIR}/web/sites/default/settings.php ] && \ [ ! -f ${DIR}/sites/default/settings.php ] && log "${TIMESTAMP} Cannot find setting.php" && return 1 return 0 } # # Create tarball # function create_tarball() { log "Create ${DIR}-backup.tar.gz" tar -czpf "${DIR}-backup.tar.gz" "${DIR}" "${DIR}.sql" [ $? -ne 0 ] && return 1 return 0 } # # Create checksum # function create_checksum() { log "Create ${DIR}-backup.md5sum checksum" CHECKSUM=$(md5sum ${DIR}-backup.tar.gz | awk '{print $1}' ) echo ${CHECKSUM} > "${DIR}-backup.md5sum" } # # Start # function main () { if check_path; then if get_db_credentials; then if verify_db_credentials; then if export_db; then if create_tarball; then create_checksum fi fi fi fi fi } [ ${#} -lt 1 ] && log "${TIMESTAMP} Directory argument is missing" && return 1 [ ${#} -gt 1 ] && log "${TIMESTAMP} Too many arguments" && return 1 main # # Show results # echo # ls -lh ${DIR}-backup.tar.gz --color=auto # ls -lh ${DIR}-backup.md5sum --color=auto # ls -lh ${DIR}-backup.log --color=auto ls -lh ${DIR}-backup.* --color=auto echo echo -e " MD5 checksum: $(cat ${DIR}-backup.md5sum)" echo