Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # My first shell script :)
- # Backup domains directories and MySQL database.
- clear
- # CONFIGURATION
- MODE_D="0740"
- MODE_F="0640"
- DAY=$(date +%F) # YYYY-MM-DD
- BACKUP_DIR="${PWD}/${DAY}"
- LOG_FILE="${BACKUP_DIR}/log.txt"
- # Dir to backup
- DOMAINS_DIR="/www"
- # Mysql DB's to backup
- DB_HOST="localhost"
- #DB_USERS=( "" )
- log(){
- if [ $# -eq 0 ]; then
- echo "loger: you must sypply some text to log"
- return
- fi
- MSG=$1
- SHOW=$2
- [ $SHOW == 1 ] && echo $MSG || :
- if [ ! -f $LOG_FILE ]; then
- if ! touch $LOG_FILE; then
- echo "Can't crete log file."
- return
- else
- chmod $MODE_F $LOG_FILE
- fi
- fi
- echo "$(date +%T) - ${MSG}\n" >> $LOG_FILE
- return
- }
- process_domains(){
- # crete ${BACKUP_DIR}/domains dir
- BDD="${BACKUP_DIR}/domains"
- if [ ! -d $BDD ] && ! mkdir -p --mode=$MODE_D $BDD; then
- log "Can't create folder ${BDD}" 1
- return
- fi
- for dir in $(ls -B $DOMAINS_DIR); do
- echo ""
- if [ -d "${DOMAINS_DIR}/${dir}" ]; then
- NAME="${BDD}/${dir}.tar.gz"
- # check if backup alredy exists
- if [ -f $NAME ]; then
- log "Backup for ${DOMAINS_DIR}/${dir} alredy exists." 1
- else
- log "Processing directory: ${DOMAINS_DIR}/${dir}" 1
- tar --create --gzip --dereference --file=$NAME --directory="${DOMAINS_DIR}/${dir}" $(ls "${DOMAINS_DIR}/${dir}")
- if [ -f $NAME ]; then
- chmod $MODE_F $NAME
- log "Success: $(basename $NAME)" 1
- else
- log "Failure while processing: ${DOMAINS_DIR}/${dir}" 1
- fi
- fi # /backup alredy exists
- fi
- done
- return
- }
- process_db(){
- local HOST=$1
- local USER_NAME=$2
- local DB_NAME=$USER_NAME
- # crete ${BACKUP_DIR}/database dir
- local BDDB="${BACKUP_DIR}/database"
- if [ ! -d $BDDB ] && ! mkdir -p --mode=$MODE_D $BDDB; then
- log "Can't create folder ${BDDB}" 1
- return
- fi
- local SQL_FILE="${BDDB}/${DB_NAME}.sql"
- local GZ_FILE="${SQL_FILE}.gz"
- # check if backup alredy exists
- if [ -f $GZ_FILE ]; then
- log "Backup for db ${DB_NAME} alredy exists." 1
- else
- PASSWORD=$(get_pass $USER_NAME)
- echo ""
- dump_db $HOST $USER_NAME $PASSWORD $DB_NAME $SQL_FILE
- ret=$?
- if [ $ret != 0 ]; then
- [ -f $SQL_FILE ] && rm $SQL_FILE || :
- # try agian?
- if [ $ret == 2 ]; then
- while true; do
- echo -n "Bad password for: ${USER_NAME} retry? (y or n) :"
- read CONFIRM
- case $CONFIRM in
- y|Y|YES|yes|Yes) break ;;
- n|N|no|NO|No)
- return
- ;;
- *) echo Please enter only y or n
- esac
- done
- process_db $HOST $USER_NAME
- fi
- return
- fi
- if [ -f $SQL_FILE ]; then
- cat $SQL_FILE | gzip -9 > $GZ_FILE
- rm $SQL_FILE
- if [ ! -f $GZ_FILE ]; then
- log "Failure while taring slq file" 1
- return
- fi
- chmod $MODE_F $GZ_FILE
- log "Success: $(basename $GZ_FILE)" 1
- else
- log "Failure while processing database: ${DB_NAME}" 1
- fi
- fi
- return
- }
- get_pass(){
- read -s -p "Password for user $1:" PASS
- echo $PASS
- return
- }
- dump_db(){
- HOST=$1
- USER=$2
- PASSWORD=$3
- DB_NAME=$4
- FILE=$5
- mysqldump --user=$USER --host=$HOST -p$PASSWORD $DB_NAME > $FILE
- return
- }
- echo "Starting backup for date: ${DAY}"
- if [ ! -d $DOMAINS_DIR ]; then
- log "Folder for backup not found: ${DOMAINS_DIR}" 1
- elif [ ! -d $BACKUP_DIR ] && ! mkdir -p --mode=$MODE_D $BACKUP_DIR; then
- log "Can't create folder ${BACKUP_DIR}" 1
- else
- process_domains
- # TODO do it better
- for user in "user1" "user2"; do
- echo ""
- process_db $DB_HOST $user
- done
- fi
Add Comment
Please, Sign In to add comment