Backup MySQL Incremental via RSYNC/FTP
Publicado por Fernando Bottega Hallberg (última atualização em 02/07/2012)
[ Hits: 9.876 ]
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
Baixa, instala, configura e executa o NO-IP.
Script iniciante para adm. de usuarios e quotas
Solução para bloquear totalmente o Facebook em sua rede
Script para liberar acesso ao PC-Anywhere para pc da rede interna
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta