Backup MySQL Incremental via RSYNC/FTP
Publicado por Fernando Bottega Hallberg (última atualização em 02/07/2012)
[ Hits: 10.323 ]
Homepage: http://hallberg.eti.br
O script funciona utilizando-se do log binário do MySQL para fazer o backup incremental da base de dados, que pode ser feito em intervalos curtos de tempo, e um backup full toda noite ou uma vez por semana.
O script também elimina os log binários mais antigos do que 15 dias da base de dados, para não ficar ocupando espaço em disco, sendo que este log já está no backup.
Baixe o script e configure as informações da base de dados e do ftp, ele criará um backup local do MySQL e sincronizará com o FTP ( arquivos mais antigos do que 30 dias serão apagados do backup local, e ficarão somente no FTP ).
No script tem exemplos de como configurar o crontab para executá-lo, lembre-se de configurar o PATH para o script corretamente.
É necessário que o rsync e o lftp estejam instalados no sistema.
Se tiverem dúvidas, sugestões ou correções, favor postarem!
http://hallberg.eti.br/wp/?p=38
#!/bin/bash
##
# MySQL BACKUP SCRIPT
# Fernando Hallberg
# http://www.hallberg.eti.br
# fernando at hallberg dot eti dot br
##
# Configure a os dados do banco e certifique-se de habilitar o log binário
# EX CRON:
# de segunda a sábado 4 vezes no dia realiza o backup do log binário
# 30 0,8,12,18 * * 1-6 /usr/sbin/flx-mybkp incremental
# domingo de manhã realiza o backup completo da base
# 2 0 * * 0 /usr/sbin/flx-mybkp full
##
BANCO=MySQL_DB
MYSQLUSER=MySQL_USER
MYSQLPASS=MySQL_USER_PASSWORD
FTPUSER=FTP_USER
FTPPASS=FTP_PASSWORD
FTPHOST=FTP_HOST
FTPDIR=
BACKUPDIR=/var/backup
mkdir -p $BACKUPDIR
mkdir -p $BACKUPDIR/mysql/binlog
mkdir -p $BACKUPDIR/mysql/full
function diskusage() {
MAX=80
LANG=C /bin/df -P | tr -s ' '|cut -d ' ' -f1,5 | grep -v Cap | while read line;
do
fs=$(echo $line | cut -d ' ' -f1)
uso=$(echo $line | cut -d ' ' -f2| cut -d '%' -f1)
if [ $uso -gt $MAX ];
then
echo "$fs esta $uso% cheio, verifique"
fi
done
}
function usage(){
echo $0 [ full | incremental ]
}
function ftpsync(){
/usr/bin/lftp -e "mirror --log=/tmp/lftp.log -v -R $BACKUPDIR mysqlbackup; bye" -u ${FTPUSER},${FTPPASS} ${FTPHOST} &> /dev/null
[ $? -gt 0 ] && echo "LFTP ERROR: $?" && exit
}
function logsync(){
binlog="`basename $(cat /etc/my.cnf | grep '^log-bin=' | cut -d '=' -f2)`"
rsync -q -a /var/lib/mysql/$binlog.[0-9][0-9][0-9][0-9][0-9][0-9] $BACKUPDIR/mysql/binlog
[ $? -gt 0 ] && echo "RSYNC ERROR: $?" && exit
diskusage
}
function full(){
/usr/bin/find $BACKUPDIR/mysql -type f -mtime +30 -delete
FFILE="${BANCO}-backup-$(date +%Y-%m-%d_%H%M).sql.xz"
/usr/bin/mysqldump -u ${MYSQLUSER} -p${MYSQLPASS} \
--opt \
--single-transaction \
--no-autocommit \
--all-databases \
--flush-logs \
--master-data \
--routines | xz -2 -c - > ${BACKUPDIR}/mysql/full/${FFILE};
[ $? -gt 0 ] && echo "MYSQLDUMP ERROR: $?" && exit
logsync
ftpsync
}
function incremental(){
/usr/bin/mysql -e 'PURGE BINARY LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 15 DAY);'
[ $? -gt 0 ] && echo "MYSQL PURGE LOG BINARY ERROR: $?" && exit
/usr/bin/mysqladmin -u ${MYSQLUSER} -p${MYSQLPASS} flush-logs
[ $? -gt 0 ] && echo "MYSQLADMIN flush-logs ERROR: $?" && exit
logsync
ftpsync
}
case "$1" in
'full' ) full ;;
'incremental') incremental ;;
esac
Acertando a hora da estação com o Observatório Nacional
DELETAR arquivos a X semanas passadas
Organizar seus arquivos por pastas
Monitoramento de espaço em disco
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (0)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









