Added backup script and config file
This commit is contained in:
parent
090825b1a2
commit
74fadc6387
2 changed files with 192 additions and 0 deletions
12
.backuprc
Normal file
12
.backuprc
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#
|
||||||
|
# ~/.backuprc
|
||||||
|
#
|
||||||
|
# Config file for backup.zsh
|
||||||
|
#
|
||||||
|
|
||||||
|
# MySQL user and password
|
||||||
|
MYSQL_USER="johndoe"
|
||||||
|
MYSQL_PASSWORD=""
|
||||||
|
|
||||||
|
# Always be verbose
|
||||||
|
#VERBOSE=1
|
180
backup.zsh
Normal file
180
backup.zsh
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
#!/bin/zsh
|
||||||
|
#
|
||||||
|
# backup.zsh
|
||||||
|
#
|
||||||
|
# Create a backup of all important things.
|
||||||
|
#
|
||||||
|
# Features:
|
||||||
|
# - MySQL dump
|
||||||
|
# - Create archives of:
|
||||||
|
# - FTP root
|
||||||
|
# - HTTP root
|
||||||
|
#
|
||||||
|
# Links:
|
||||||
|
# - https://linuxize.com/post/how-to-back-up-and-restore-mysql-databases-with-mysqldump/
|
||||||
|
# - https://www.shkodenko.com/mysql-and-mysqldump-defaults-file-without-a-password/
|
||||||
|
#
|
||||||
|
|
||||||
|
SCRIPT_NAME="$(basename $0)"
|
||||||
|
SCRIPT_VERSION="0.20121214.2"
|
||||||
|
|
||||||
|
SCRIPT_START=$(date +%s.%3N)
|
||||||
|
BACKUP_FS="/mnt/backup"
|
||||||
|
BACKUP_DEST="$BACKUP_FS/$(date +%Y-%m-%d)_${SCRIPT_NAME}"
|
||||||
|
|
||||||
|
VERBOSE=0
|
||||||
|
RUN_CONTEXT="${RUN_CONTEXT:-shell}"
|
||||||
|
|
||||||
|
# Script utility lib
|
||||||
|
# Part of Git repo https://github.com/malte70/scripts
|
||||||
|
source /home/malte70/bin/_base.inc.sh
|
||||||
|
|
||||||
|
# Italic output for informative messages
|
||||||
|
message_info() {
|
||||||
|
_print_term $_ANSI_COLOR_GREEN
|
||||||
|
_print "[${SCRIPT_NAME}] "
|
||||||
|
_print_term $_ANSI_RESET
|
||||||
|
_print_term $_ANSI_ATTR_ITALIC
|
||||||
|
_println $@
|
||||||
|
_print_term $_ANSI_RESET
|
||||||
|
}
|
||||||
|
|
||||||
|
# Custom messages for crontab execution context
|
||||||
|
if [[ $RUN_CONTEXT == "crontab" ]]
|
||||||
|
then
|
||||||
|
message() {
|
||||||
|
_print "[${SCRIPT_NAME}] "
|
||||||
|
_print "[$(date --rfc-3339=seconds)] "
|
||||||
|
_print "<NOTICE> "
|
||||||
|
_println $@
|
||||||
|
}
|
||||||
|
message_info() {
|
||||||
|
_print "[${SCRIPT_NAME}] "
|
||||||
|
_print "[$(date --rfc-3339=seconds)] "
|
||||||
|
_print "<INFO> "
|
||||||
|
_println $@
|
||||||
|
}
|
||||||
|
message_error() {
|
||||||
|
_print "[${SCRIPT_NAME}] "
|
||||||
|
_print "[$(date --rfc-3339=seconds)] "
|
||||||
|
_print "<ERROR> "
|
||||||
|
_println $@
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Be verbose if running in crontab context, or the command line
|
||||||
|
# switch was given
|
||||||
|
#if [[ $1 == "--verbose" || $1 == "-V" || $RUN_CONTEXT == "crontab" ]]
|
||||||
|
if [[ $1 == "--verbose" || $1 == "-V" ]]
|
||||||
|
then
|
||||||
|
VERBOSE=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Config file
|
||||||
|
if [[ -f "$HOME/.backuprc" ]]
|
||||||
|
then
|
||||||
|
source "$HOME/.backuprc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Mount backup drive
|
||||||
|
#
|
||||||
|
if ! grep --silent ${BACKUP_FS} /proc/mounts
|
||||||
|
then
|
||||||
|
message "Mounting backup FS..."
|
||||||
|
if [[ $UID -eq 0 ]]; then
|
||||||
|
mount ${BACKUP_FS}
|
||||||
|
else
|
||||||
|
sudo mount ${BACKUP_FS}
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
message_info "Note: Backup FS already mounted."
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create backup destination folder
|
||||||
|
#
|
||||||
|
message "Creating destination folder..."
|
||||||
|
mkdir -p ${BACKUP_DEST}
|
||||||
|
cd ${BACKUP_DEST}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# MySQL Backup
|
||||||
|
#
|
||||||
|
message "Dumping MySQL databases..."
|
||||||
|
if [[ -z $MYSQL_USER || -z $MYSQL_PASSWORD ]]; then
|
||||||
|
echo -n "MySQL User? "
|
||||||
|
read MYSQL_USER
|
||||||
|
echo -n "MySQL Password? "
|
||||||
|
read -rs MYSQL_PASSWORD
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
echo "[client]
|
||||||
|
user=$MYSQL_USER
|
||||||
|
password=$MYSQL_PASSWORD" >mysqldump.cnf
|
||||||
|
|
||||||
|
mkdir -p MySQL
|
||||||
|
for DB in $(mysql --defaults-file=mysqldump.cnf -e 'show databases' -s --skip-column-names); do
|
||||||
|
case $DB in
|
||||||
|
"information_schema"|"performance_schema")
|
||||||
|
#"information_schema"|"performance_schema"|"mysql")
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
mysqldump --defaults-file=mysqldump.cnf $DB > "MySQL/$DB.sql";
|
||||||
|
done
|
||||||
|
rm -f mysqldump.cnf
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Backup /srv/ftp
|
||||||
|
#
|
||||||
|
message "Archiving /srv/ftp..."
|
||||||
|
_archive="${BACKUP_DEST}/srv-ftp.tar.bz2"
|
||||||
|
pushd /srv >/dev/null
|
||||||
|
if [[ $VERBOSE -eq 0 ]]; then
|
||||||
|
sudo tar cjf "$_archive" ftp/
|
||||||
|
else
|
||||||
|
sudo tar cjvf "$_archive" ftp/
|
||||||
|
fi
|
||||||
|
if ! file -i "$_archive" | grep --silent "application/x-bzip2"; then
|
||||||
|
message_error "Fail!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Backup /srv/http
|
||||||
|
#
|
||||||
|
message "Archiving /srv/http..."
|
||||||
|
_archive="${BACKUP_DEST}/srv-http.tar.bz2"
|
||||||
|
pushd /srv >/dev/null
|
||||||
|
if [[ $VERBOSE -eq 0 ]]; then
|
||||||
|
sudo tar cjf "$_archive" http/
|
||||||
|
else
|
||||||
|
sudo tar cjvf "$_archive" http/
|
||||||
|
fi
|
||||||
|
if ! file -i "$_archive" | grep --silent "application/x-bzip2"; then
|
||||||
|
message_error "Fail!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Finished.
|
||||||
|
#
|
||||||
|
SCRIPT_END=$(date +%s.%3N)
|
||||||
|
SCRIPT_RUNTIME=$(echo "scale=3;$SCRIPT_END-$SCRIPT_START" | bc)
|
||||||
|
|
||||||
|
message "Done after ${SCRIPT_RUNTIME} seconds."
|
||||||
|
message "Everything was stored in ${BACKUP_DEST}"
|
||||||
|
|
Loading…
Reference in a new issue