Last active
March 15, 2021 20:21
-
-
Save iuriguilherme/a9f251b1baadf2249faa23b82d91a0b3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
## Backup incremental do banco de dados do wordpress | |
## Precisa de mysqldump e rdiff-backup | |
## Pronto pra rodar com crontab | |
## Mantém arquivos temporários com alta compressão em /tmp/backups | |
## Usa arquivo de configuração do wordpress para pegar os dados do mysql opcionalmente | |
NOW="$(date +%s)" | |
SITE="wordpress" | |
WORDPRESS_CONFIG_DIR="/var/www/html" | |
WORDPRESS_CONFIG_FILE="wp-config.php" | |
MYSQL_USER="user" | |
MYSQL_PASSWORD="password" | |
MYSQL_DATABASE="database" | |
BACKUP_TMP="/tmp/backups/" | |
BACKUP_TAR="${BACKUP_TMP}/tarballs/" | |
NICENESS="19" | |
IONICE_CLASS="2" | |
IONICE_CLASSDATA="7" | |
if [ ! -z $1 ] | |
then | |
SITE="${1}" | |
if [ ! -z $2 ] | |
then | |
if [ -d "${2}" ] | |
then | |
WORDPRESS_CONFIG_DIR="${2}" | |
else | |
MYSQL_USER="${2}" | |
fi | |
fi | |
else | |
echo "Dá pra definir os dados do mysql assim: $0 <site> <usuario> <senha> <bancodedados>. Usando site=${SITE}, usuário=${MYSQL_USER}, senha=${MYSQL_PASSWORD} e banco=${MYSQL_DATABASE} por omissão." | |
echo "Alternativamente, definir o nome do site e o caminho para o arquivo de configuração do wordpress: $0 <site> <caminho>. Usando site=${SITE} e caminho=${WORDPRESS_CONFIG_DIR} para arquivo=${WORDPRESS_CONFIG_FILE} por omissão." | |
fi | |
if [ ! -z $3 ] | |
then | |
MYSQL_PASSWORD="${3}" | |
if [ ! -z $4 ] | |
then | |
MYSQL_DATABASE="${4}" | |
fi | |
else | |
if [ -f "${WORDPRESS_CONFIG_DIR}/${WORDPRESS_CONFIG_FILE}" ] | |
then | |
MYSQL_USER="$(awk -F "'" '/DB_USER/{print $4}' "${WORDPRESS_CONFIG_DIR}/${WORDPRESS_CONFIG_FILE}")" | |
MYSQL_PASSWORD="$(awk -F "'" '/DB_PASSWORD/{print $4}' "${WORDPRESS_CONFIG_DIR}/${WORDPRESS_CONFIG_FILE}")" | |
MYSQL_DATABASE="$(awk -F "'" '/DB_NAME/{print $4}' "${WORDPRESS_CONFIG_DIR}/${WORDPRESS_CONFIG_FILE}")" | |
else | |
echo "Arquivo de configuração não encontrado em ${WORDPRESS_CONFIG_DIR}/${WORDPRESS_CONFIG_FILE}. Usando valores padrão (provavelmente vai dar errado!)" | |
fi | |
fi | |
BACKUP_DIFF="${BACKUP_TMP}/${SITE}/" | |
BACKUP_FINAL="${HOME}/backups/${SITE}/" | |
for DIR in "${BACKUP_TAR}" "${BACKUP_DIFF}" "${BACKUP_FINAL}" | |
do | |
if [ ! -d "${DIR}" ] | |
then | |
mkdir -p "${DIR}" | |
fi | |
done | |
echo -n "Efetuando dump do mysql... " | |
ionice -c "${IONICE_CLASS}" -n "${IONICE_CLASSDATA}" nice -n "${NICENESS}" \ | |
mysqldump \ | |
--single-transaction \ | |
--quick \ | |
--skip-extended-insert \ | |
--routines \ | |
-u"${MYSQL_USER}" \ | |
-p"${MYSQL_PASSWORD}" \ | |
"${MYSQL_DATABASE}" \ | |
1> "${BACKUP_DIFF}"/backup_mysql_"${SITE}".sql \ | |
&& echo "feito." \ | |
|| echo "ERRO!" | |
echo -n "Fazendo backup incremental... " | |
ionice -c "${IONICE_CLASS}" -n "${IONICE_CLASSDATA}" nice -n "${NICENESS}" \ | |
rdiff-backup \ | |
"${BACKUP_DIFF}" \ | |
"${BACKUP_FINAL}" \ | |
&& echo "feito." \ | |
|| echo "ERRO!" | |
echo -n "Compactando arquivo... " | |
XZ_OPTS=-e9 \ | |
ionice -c "${IONICE_CLASS}" -n "${IONICE_CLASSDATA}" nice -n "${NICENESS}" \ | |
tar \ | |
-cJSpnf \ | |
"${BACKUP_TAR}"/backup_mysql_"${SITE}"_"${NOW}".sql.tar.xz \ | |
-C "${BACKUP_DIFF}" \ | |
backup_mysql_"${SITE}".sql \ | |
&& echo "feito." \ | |
|| echo "ERRO!" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment