Skip to content

Instantly share code, notes, and snippets.

@ArrayIterator
Created October 28, 2021 10:04
Show Gist options
  • Save ArrayIterator/2a9a1ddc2fff7dec4dfd1e20e70efe3a to your computer and use it in GitHub Desktop.
Save ArrayIterator/2a9a1ddc2fff7dec4dfd1e20e70efe3a to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
C_USER='user'
CWD_DIR=/home/${C_USER}/host/aurys.fr
CONFIG_DIR=${CWD_DIR}/config
BACKUP_DIR=${CWD_DIR}/database
CONFIG_FILE=${CWD_DIR}/public/wp-config.php
COMMITDATE=`date '+%Y-%m-%d %H:%M:%S'`
C_NAME='${C_USER}'
C_EMAIL='${C_USER}@127.0.0.1'
echo -e "---------------------------------\n"
echo -e " GIT BACKUP\n";
echo -e "---------------------------------\n"
if [ $(whoami) != ${C_USER} ]; then
echo -e "\e[31m[FAILED]\e[00m PLEASE USE USER : \e[35m\`${C_USER}\`\e[00m TO RUN BACKUP\n";
exit;
fi
if [ ! -f /usr/bin/git ]; then
echo -e "\e[31m[FAILED]\e[00m BINARY APPLICATION : \e[35m\`/usr/bin/git\`\e[00m IS NOT INSTALLED\n";
exit;
fi
if [ ! -f ${CONFIG_FILE} ]; then
echo -e "\e[31m[FAILED]\e[00m CONFIG FILE: \e[32m${CONFIG_FILE}\e[00m DOES NOT EXIST!\n\n";
exit;
fi
GIT_ORIGIN=`git remote`
GIT_REMOTE=`git remote -v`
if [ "${GIT_REMOTE}" == '' ]; then
echo -e "\e[31m[FAILED]\e[00m REMOTE \e[32mREPOSITORY\e[00m DOES NOT EXIST!\n\n";
fi
echo -e "\e[35m[PREPARE]\e[00m GO TO : \e[32m${CWD_DIR}\e[00m";
# > GOTO
cd ${CWD_DIR};
if [ ! -d ${BACKUP_DIR} ]; then
mkdir -p "${BACKUP_DIR}"
fi
# > DETERMINE DB CHECKING
echo -e "\e[35m[PREPARE]\e[00m DOING \e[32mDATABASE CHECKUP\e[00m";
DB_HOST=`cat ${CONFIG_FILE} | grep DB_HOST | grep -iPoh "[^\"\'\(\)]+" |tail -1`
DB_USER_NAME=`cat ${CONFIG_FILE} | grep DB_USER | grep -iPoh "[^\"\'\(\)]+" |tail -1`
DB_PASSWORD=`cat ${CONFIG_FILE} | grep DB_PASSWORD | grep -iPoh "[^\"\'\(\)]+" |tail -1`
DB_NAME=`cat ${CONFIG_FILE} | grep DB_NAME | grep -iPoh "[^\"\'\(\)]+" |tail -1`
if [ ${DB_HOST} == '' ];then
echo "\e[31m[FAILED]\e[00m Database Host Does not exists.";
fi
if [ ${DB_USER_NAME} == '' ];then
echo "\e[31m[FAILED]\e[00m Database Username Does not exists.";
fi
if [ ${DB_PASSWORD} == '' ];then
echo "\e[31m[FAILED]\e[00m Database Password Does not exists.";
fi
if [ ${DB_NAME} == '' ];then
echo "\e[31m[FAILED]\e[00m Database Password Does not exists.";
fi
echo -e " + DATABASE HOST : \e[32m${DB_HOST}\e[00m";
echo -e " + DATABASE USER : \e[32m${DB_USER_NAME}\e[00m";
echo -e " + DATABASE PASSWORD: \e[32m${DB_PASSWORD}\e[00m";
echo -e " + DATABASE NAME : \e[32m${DB_NAME}\e[00m";
TMPDBNAME="${BACKUP_DIR}/${DB_NAME}.sql.tmp"
DBNAME="${BACKUP_DIR}/${DB_NAME}.sql"
echo -e "\e[35m[BACKUPING]\e[00m BACKUP DATABASE TO \e[32m${DBNAME}\e[00m";
COMMAND="mysqldump -u ${DB_USER_NAME} --password='${DB_PASSWORD}' --host=${DB_HOST} ${DB_NAME} &> ${DBNAME}"
echo -e "Running Command:\n${COMMAND}"
mysqldump -u ${DB_USER_NAME} --password="${DB_PASSWORD}" --host=${DB_HOST} ${DB_NAME} &> ${TMPDBNAME} || exit
# exit;
EXISTSDB=$(cat ${TMPDBNAME} | grep CREATE | head -1);
if [[ "${EXISTSDB}" == '' ]];then
# rm ${TMPDBNAME}
echo -e "\e[31m[FAILED]\e[00m No Database Has Been Backed UP.";
else
if [ -f ${DBNAME} ];then
rm ${DBNAME}
fi
echo -e "\e[32m[SUCCEEED]\e[00m Database Has Been Backed UP.";
mv -f ${TMPDBNAME} ${DBNAME}
fi
# REMOVE CACHED
echo -e '\e[35m[COMPRESS]\e[00m COMPRESS DATABASE TO GZIP'
if [ -f "${DBNAME}.previous.gz" ]; then
rm -f "${DBNAME}.previous.gz";
git rm --cached "${DBNAME}.previous.gz"
fi
if [ -f "${DBNAME}.gz" ]; then
mv "${DBNAME}.gz" "${DBNAME}.previous.gz"
git rm --cached "${DBNAME}.gz"
fi
gzip -9 $DBNAME
# BACKUP GIT
echo -e '\e[35m[PUSH]\e[00m PROCESSING BACKUP TO GIT'
echo -e " + Set email to \e[32m[${C_EMAIL}]\e[00m"
/usr/bin/git config user.email "${C_EMAIL}" &> /dev/null
echo -e " + Set Username to \e[32m[${C_NAME}]\e[00m"
/usr/bin/git config user.name "${C_NAME}" &> /dev/null
echo -e " + Adding all files"
/usr/bin/git add -A &> /dev/null
echo -e " + Commiting files with commit note: Backup \e[32m${COMMITDATE}\e[00m"
/usr/bin/git commit -am "Backup ${COMMITDATE}" &> /dev/null
echo -e " + Push data to repository"
/usr/bin/git push origin master
echo -e " + Prune garbage collection"
/usr/bin/git gc --prune --aggressive # &> /dev/null
/usr/bin/git repack --max-pack-size=1g -a -d
#/usr/bin/git remote update
echo -e "\e[35m[DONE]\e[00m\n\n"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment