MysqlBackupAll
Jump to navigation
Jump to search
Questo script fa un backup completo di MySQL e lo invia all'email configurato. E' possibile restaurare il backup con le istruzioni dell'articolo MySQL.
Requirements
Il percorso /srv/backup/mysql/alldatabases/ deve esistere e essere di proprietà dell'utente mysql, e i comandi mail, mysqldump, gzip, ftp e mutt devono essere accessibili.
#!/bin/bash
#
# NAME mysqlBackupAll.sh
# VERSION 1.1
# REQUIRED mysqldump, mail, mutt, gzip, ftp
#
# Var
BACKUP_DIR="/srv/backup/mysql/alldatabases/";
BACKUP_FILE="bkp-mysql_alldatabases-`date +%Y.%m.%d_%H.%M.%S`-dump.sql.gz";
BACKUP_COMMAND="mysqldump --user=root --single-transaction --all-databases --flush-logs --lock-tables --flush-privileges | gzip > ${BACKUP_DIR}${BACKUP_FILE}";
BACKUP_USER="root";
ROTATE_USER="mysql";
ROTATE_DAYS="8";
SEND_BY_FTP="y";
FTP_HOST="[DESTDOMSIN.WHR]";
FTP_DIR="mysql/alldatabases";
FTP_USER="[USER]";
FTP_PASS="[PASS]";
SEND_BY_EMAIL="n";
EMAIL="[WHO@MAILSERVER.WHR]";
SUBJECT="[YOURDOMAIN.WHR] MySQL backup";
# Test
if test ! `which mail`
then
echo "Command mail not found, exit.";
exit 1;
fi;
if test ! `which mysqldump`
then
echo "Command mysqldump not found, exit." | mail -s "${SUBJECT} error." "${EMAIL}";
exit 1;
fi;
if test ! `which gzip`
then
echo "Command gzip not found, exit." | mail -s "${SUBJECT} error." "${EMAIL}";
exit 1;
fi;
if test ! `which ftp`
then
echo "Command ftp not found, exit." | mail -s "${SUBJECT} error." "${EMAIL}";
exit 1;
fi;
if test ! `which mutt`
then
echo "Command mutt not found, exit." | mail -s "${SUBJECT} error." "${EMAIL}";
exit 1;
fi;
if ! test -d "${BACKUP_DIR}";
then
echo "Directory ${BACKUP_DIR} don't exist, exit." | mail -s "${SUBJECT} error." "${EMAIL}";
exit 1;
fi;
if test -f "${BACKUP_DIR}${BACKUP_FILE}";
then
echo "File ${BACKUP_DIR}${BACKUP_FILE} alredy exist, exit." | mail -s "${SUBJECT} error." "${EMAIL}";
exit 1;
fi;
if ! su - "${BACKUP_USER}" -c "touch ${BACKUP_DIR}${BACKUP_FILE}";
then
echo "User ${BACKUP_USER} cannot write in ${BACKUP_DIR}${BACKUP_FILE}, exit." | mail -s "${SUBJECT} error." "${EMAIL}";
exit 1;
fi;
su - "${BACKUP_USER}" -c "rm -f ${BACKUP_DIR}${BACKUP_FILE}";
# Backup
if ! su - "${BACKUP_USER}" -s /bin/sh -c "${BACKUP_COMMAND}";
then
echo "Backup ${BACKUP_COMMAND} failure, exit." | mail -s "${SUBJECT} error." "${EMAIL}";
exit 1;
fi;
chown "${ROTATE_USER}":"${ROTATE_USER}" "${BACKUP_DIR}${BACKUP_FILE}";
# Rotate
if ! su - "${ROTATE_USER}" -s /bin/sh -c "ls -t ${BACKUP_DIR}*-dump.sql.gz | tail -n +${ROTATE_DAYS} | xargs -d '\n' rm -f";
then
echo "Rotate ${BACKUP_DIR} failure, exit." | mail -s "${SUBJECT} error." "${EMAIL}";
exit 1;
fi;
# Upload
if test ${SEND_BY_FTP} = "y";
then
ftp -i -n ${FTP_HOST} << EOF
user ${FTP_USER} ${FTP_PASS}
binary
put ${BACKUP_DIR}${BACKUP_FILE} ${FTP_DIR}${BACKUP_FILE}
quit
EOF
if test $? -ne 0;
then
echo "Upload to ${FTP_HOST} failure, exit." | mail -s "${SUBJECT} error." ${EMAIL};
exit 1;
fi;
fi;
# Exit
if test ${SEND_BY_EMAIL} = "y";
then
ls -l "${BACKUP_DIR}" | mutt -n -e 'set copy=no' -s "${SUBJECT} success." -a "${BACKUP_DIR}${BACKUP_FILE}" -- "${EMAIL}";
exit 0;
else
ls -l "${BACKUP_DIR}" | mail -s "${SUBJECT} success." "${EMAIL}";
fi;
# End