update mysql_backup and pg_backup scripts

This commit is contained in:
nono 2023-03-19 10:13:22 +01:00
parent f4b38e685a
commit 9cca36ecc0
2 changed files with 248 additions and 68 deletions

View file

@ -1,6 +1,11 @@
#!/bin/bash #!/bin/bash
SCRIPT_NAME=${0##*/} VER=0.1
PROJECT="https://git.gresse.net/Ops/Backup"
SCRIPT_NAME=mysql_backup.sh
SCRIPT_FILENAME=`basename "$0"`
BACKUP_DIR=/tmp/backup
#LOGIN #LOGIN
MYSQL_SERVER=localhost MYSQL_SERVER=localhost
@ -18,8 +23,6 @@ TARGET_WEEKDAY=1
# Ex : "|mydb001|mydb002" # Ex : "|mydb001|mydb002"
EGREP_EXCLUDE_DB="" EGREP_EXCLUDE_DB=""
BACKUP_DIR=$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )
LATEST_TIMESTAMP=$(date +"%Y%m%d-%HH%M") LATEST_TIMESTAMP=$(date +"%Y%m%d-%HH%M")
DAILY_TIMESTAMP=$(date +"%Y%m%d") DAILY_TIMESTAMP=$(date +"%Y%m%d")
@ -71,32 +74,27 @@ function backup() {
echo_date "Backup finished" >>${LOG_FILE} echo_date "Backup finished" >>${LOG_FILE}
} }
function usage() {
echo "./mysql_backup.sh"
echo " -h --help : Show help"
echo " -i : Install"
echo " -l : List"
echo " -u : Uninstall"
echo ""
}
function install() { function install() {
echo Install ${SCRIPT_NAME} to ${BACKUP_DIR} echo "Starting Installation to directory '${BACKUP_DIR}'"
if [ -e ${BACKUP_DIR} ] ; then
_err "${BACKUP_DIR} already exists"
exit 1
fi
echo -n " -> Create directory ${BACKUP_DIR}/daily" echo -n " -> Create directory ${BACKUP_DIR}/daily"
mkdir -p ${BACKUP_DIR}/daily mkdir -p ${BACKUP_DIR}/data/daily
echo ": Done" echo ": Done"
echo -n " -> Create directory ${BACKUP_DIR}/weekly" echo -n " -> Create directory ${BACKUP_DIR}/weekly"
mkdir -p ${BACKUP_DIR}/weekly mkdir -p ${BACKUP_DIR}/data/weekly
echo ": Done" echo ": Done"
echo -n " -> Create directory ${BACKUP_DIR}/monthly" echo -n " -> Create directory ${BACKUP_DIR}/monthly"
mkdir -p ${BACKUP_DIR}/monthly mkdir -p ${BACKUP_DIR}/data/monthly
echo ": Done" echo ": Done"
echo -n " -> Create directory ${BACKUP_DIR}/latest" echo -n " -> Create directory ${BACKUP_DIR}/latest"
mkdir -p ${BACKUP_DIR}/latest mkdir -p ${BACKUP_DIR}/data/latest
echo ": Done" echo ": Done"
echo -n " -> Create directory ${BACKUP_DIR}/logs" echo -n " -> Create directory ${BACKUP_DIR}/logs"
@ -107,6 +105,19 @@ function install() {
mkdir -p ${BACKUP_DIR}/conf mkdir -p ${BACKUP_DIR}/conf
echo ": Done" echo ": Done"
echo -n " -> Install script to ${BACKUP_DIR}"
cp ${SCRIPT_FILENAME} ${BACKUP_DIR}/${SCRIPT_NAME}
chmod +x ${BACKUP_DIR}/${SCRIPT_NAME}
echo ": Done"
echo -n " -> Change Backup Directory in installed script"
sed -i -r "s!^BACKUP_DIR=.*!BACKUP_DIR=$BACKUP_DIR!" ${BACKUP_DIR}/${SCRIPT_NAME}
echo ": Done"
echo -n " -> Install Crontab"
crontab -l | { cat; echo "30 22 * * * ${BACKUP_DIR}/${SCRIPT_NAME} -r >/dev/null 2>&1"; } | crontab -
echo ": Done"
echo " -> Install Finished :)" echo " -> Install Finished :)"
} }
@ -127,33 +138,16 @@ function list() {
} }
function uninstall() { function uninstall() {
read -r -p "Are you sure to uninstall? [y/N]" confirm_uninstall read -r -p "Are you sure to uninstall ${BACKUP_DIR}? [y/N]" confirm_uninstall
case ${confirm_uninstall} in case ${confirm_uninstall} in
[yY]) [yY])
echo "=== === === Uninstall all === === ===" echo "=== === === Uninstall all === === ==="
echo -n " -> Remove directory ${BACKUP_DIR}/daily" echo -n " -> Remove directory ${BACKUP_DIR}"
rm -Rf ${BACKUP_DIR}/daily rm -Rf ${BACKUP_DIR}
echo ": Done" echo ": Done"
echo -n " -> Remove directory ${BACKUP_DIR}/weekly" echo -n " -> Remove crontab (TODO)"
rm -Rf ${BACKUP_DIR}/weekly
echo ": Done"
echo -n " -> Remove directory ${BACKUP_DIR}/monthly"
rm -Rf ${BACKUP_DIR}/monthly
echo ": Done"
echo -n " -> Remove directory ${BACKUP_DIR}/latest"
rm -Rf ${BACKUP_DIR}/latest
echo ": Done"
echo -n " -> Remove directory ${BACKUP_DIR}/logs"
rm -Rf ${BACKUP_DIR}/logs
echo ": Done"
echo -n " -> Remove directory ${BACKUP_DIR}/conf"
rm -Rf ${BACKUP_DIR}/conf
echo ": Done" echo ": Done"
echo " -> Uninstall Finished :)" echo " -> Uninstall Finished :)"
@ -165,36 +159,76 @@ function uninstall() {
esac esac
} }
function echo_date() { function _info() {
date +"[%Y%m%d-%H:%M:%S] ${1}" date +"[INFO] ${1}"
} }
if [ "$#" -ge 1 ]; then function _err(){
case $1 in echo "[ERROR] ${1}"
-h | --help) }
usage
exit function _process(){
while [ ${#} -gt 0 ]; do
case "${1}" in
--help | -h)
showhelp
return
;;
--version | -v)
version
return
;;
--install | -i)
if [ -n "${2}" ]; then
BACKUP_DIR=${2}
fi
install
return
;;
--uninstall | -u)
if [ -n "${2}" ]; then
BACKUP_DIR=${2}
fi
uninstall
return
;;
--list | -l)
list
return
;;
--run | -r)
backup
return
;;
*)
echo "Unknown parameter : ${1}"
return 1
;; ;;
-i) esac
install shift
exit done
;; fi
-u) }
uninstall
exit version() {
;; echo "${SCRIPT_NAME} (${PROJECT}) - Version ${VER}"
-l) }
list
exit function showhelp() {
;; echo "Usage: mysql_backup.sh [commands]
*) Commands:
echo "ERROR: unknown parameter \"$PARAM\"" -h, --help Show this help message.
usage -v, --version Show version info.
exit 1 -i, --install <directory> Install to the specific direcotry.
;; -u, --uninstall <directory> Uninstall to the specific direcotry.
esac -l, --list List backup
shift -r, --run Run backup of all databases
else "
backup }
exit
fi function main() {
[ -z "$1" ] && showhelp && return
_process "$@"
}
main "$@"

146
pg_backup.sh Executable file
View file

@ -0,0 +1,146 @@
#!/usr/bin/env sh
#
# Backup a Postgresql database into a daily file.
#!/usr/bin/env bash
VER=0.1
SCRIPT_NAME="backup.sh"
PROJECT="https://github.com/PierNola/BackupPg/"
SCRIPT_FILENAME=`basename "$0"`
BACKUP_DIR=/tmp/backup
DATA_DIR=${BACKUP_DIR}/data
ARCH_DIR=${BACKUP_DIR}/archives
LOG_DIR=${BACKUP_DIR}/log
DAY_TO_KEEP_DUMP=14
DAY_TO_KEEP_LOG=14
DATE=$(date +"%Y%m%d-%H%M")
LOG_FILE=${LOG_DIR}/${DATE}-backup.log
backup() {
_date_echo "Starting PostgreSQL backup" >${LOG_FILE}
DATABASES=`psql -l -t | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d'` 2>>${LOG_FILE}
for DB in ${DATABASES}; do
GZ_DMP_FILE=${DATA_DIR}/${DB}.dmp.gz
ARCH_GZ_DMP_FILE=${ARCH_DIR}/${DATE}-${DB}.dmp.gz
_date_echo "Starting backup of database '${DB}'" >>${LOG_FILE}
pg_dump -Upostgres -v ${DB} -F p 2>>${LOG_FILE} | gzip >${GZ_DMP_FILE}
_date_echo "Creating backup archives of database '${DB}'" >>${LOG_FILE}
cp ${GZ_DMP_FILE} ${ARCH_GZ_DMP_FILE}
done
_date_echo "Prune all archives backup older then ${DAY_TO_KEEP_DUMP} days" >>${LOG_FILE}
find ${ARCH_DIR} -type f -maxdepth 1 -mtime +${DAY_TO_KEEP_DUMP} -name "*.gz" -delete 2>&1 >>${LOG_FILE}
_date_echo "End PostgreSQL backup" >>${LOG_FILE}
# prune old logs
find ${LOG_DIR} -type f -maxdepth 1 -mtime +${DAY_TO_KEEP_LOG} -name "*.log" -delete
}
_vacuum_db() {
if [ "`date +%d`" = "17" ]; then
echo "`date` : vacuum full analyze"
/usr/bin/psql $dbname -c "vacuum full analyze;"
else
echo "`date` : vacuum"
/usr/bin/psql $dbname -c "vacuum;"
fi
}
_reindex_db() {
if [ "`date +%u`" = "7" ]; then
/usr/bin/reindexdb -a
fi
}
install() {
_date_echo "Starting Installation to directory '${BACKUP_DIR}'"
if [ -e ${BACKUP_DIR} ] ; then
_err "${BACKUP_DIR} already exists"
exit 1
fi
# Create all directories
mkdir -p ${BACKUP_DIR}
mkdir ${BACKUP_DIR}/data
mkdir ${BACKUP_DIR}/log
mkdir ${BACKUP_DIR}/archives
# Install script to backup directory
cp ${SCRIPT_FILENAME} ${BACKUP_DIR}/${SCRIPT_NAME}
chmod +x ${BACKUP_DIR}/${SCRIPT_NAME}
# Change Backup Directory in installed script
sed -i -r "s!^BACKUP_DIR=.*!BACKUP_DIR=$BACKUP_DIR!" ${BACKUP_DIR}/${SCRIPT_NAME}
# Install Cron Job
crontab -l | { cat; echo "30 22 * * * ${BACKUP_DIR}/${SCRIPT_NAME} -r >/dev/null 2>&1"; } | crontab -
}
_date_echo() {
date +"[%Y-%m-%d %H:%M] ${1}"
}
_err(){
echo "[ERROR] ${1}"
}
_process(){
while [ ${#} -gt 0 ]; do
case "${1}" in
--help | -h)
showhelp
return
;;
--version | -v)
version
return
;;
--install | -i)
if [ -n "${2}" ]; then
BACKUP_DIR=${2}
fi
install
return
;;
--run | -r)
backup
return
;;
*)
echo "Unknown parameter : ${1}"
return 1
;;
esac
shift
done
}
version() {
echo "${PROJECT} - Version ${VER}"
}
showhelp() {
version
echo "Usage: $SCRIPT_NAME [commands]
Commands:
-h, --help Show this help message.
-v, --version Show version info.
-i, --install <directory> Install to the specific direcotry.
-r, --run Run backup of all databases
"
}
main() {
[ -z "$1" ] && showhelp && return
_process "$@"
}
main "$@"