Skip to content

Instantly share code, notes, and snippets.

@iuriguilherme
Last active March 15, 2021 20:21
Show Gist options
  • Save iuriguilherme/a9f251b1baadf2249faa23b82d91a0b3 to your computer and use it in GitHub Desktop.
Save iuriguilherme/a9f251b1baadf2249faa23b82d91a0b3 to your computer and use it in GitHub Desktop.
#!/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