Sugestão de script para automatizar o backup do banco de dados em um outro servidor através do SSH.
Exemplo de configuração no cron (diariamente as 04:00 AM)
0 4 * * * /opt/backup_ssh.sh >> /var/log/backup_ssh.log 2>&1
Script base, ajustar as variáveis com os dados de acesso corretos.
#!/bin/bash
DB_HOST="localhost"
DB_USER="root"
DB_PASS=""
SSH_HOST="192.168.1.100"
SSH_USER="login-do-usuario-ssh"
SSH_PASS="senha-do-usuario-ssh"
SSH_PORT="22"
SSH_DIR="/home"
#------------------------------------------------------------------------------------------
# Não mexer abaixo deste ponto a não ser que saiba exatamente o que esteja fazendo
#------------------------------------------------------------------------------------------
DATABASES=("vigo_erp" "mikrotik_erp" "mail")
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="backup_${TIMESTAMP}.sql.gz"
TMP_DIR=$(mktemp -d)
TMP_FILE="${TMP_DIR}/${BACKUP_FILE}"
DUMP_ARGS=(
-h "${DB_HOST}"
-u "${DB_USER}"
-p"${DB_PASS}"
--default-character-set=latin1
--quick
--force
--hex-blob
--max-allowed-packet=200M
--single-transaction
--routines
--triggers
--databases "${DATABASES[@]}"
)
cleanup() {
[ -n "${TMP_DIR}" ] && [ -d "${TMP_DIR}" ] && rm -rf "${TMP_DIR}"
}
trap cleanup EXIT
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Iniciando dump dos bancos de dados..."
if ! mysqldump "${DUMP_ARGS[@]}" | gzip > "${TMP_FILE}"; then
echo "[ERRO] Falha ao gerar o dump." >&2
exit 1
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Dump gerado: ${BACKUP_FILE} ($(du -sh "${TMP_FILE}" | cut -f1))"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Enviando para ${SSH_HOST}..."
if ! command -v sshpass &>/dev/null; then
echo "[ERRO] sshpass não encontrado. Instale com: yum install -y sshpass" >&2
exit 1
fi
SSH_OPTS=(-p "${SSH_PORT}" -o StrictHostKeyChecking=accept-new)
if ! sshpass -p "${SSH_PASS}" scp -P "${SSH_PORT}" -o StrictHostKeyChecking=accept-new \
"${TMP_FILE}" "${SSH_USER}@${SSH_HOST}:${SSH_DIR}/"; then
echo "[ERRO] Falha ao enviar backup para ${SSH_HOST}." >&2
exit 1
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup enviado com sucesso: ${SSH_HOST}:${SSH_DIR}/${BACKUP_FILE}"