dev/toolbox/backup.sh
2024-04-18 10:11:15 +03:00

129 lines
2.9 KiB
Bash
Executable File

#!/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
echo
echo -e " MD5 checksum: $(cat ${DIR}-backup.md5sum)"
echo