Backup do banco de dados MySQL e gzip

2

Estou tentando obter um pouco mais de utilidade dos meus backups do MySQL. Eu estou querendo gzip meu backup quando é concluído a partir de um trabalho cron. Aqui está o script que eu tenho até agora para fazer o backup.

#!/bin/sh
date='date -Iminutes'
mysqldump --all-databases > /var/sqlbackup/sqlbackup-$date.sql -pmypassword
find /var/sqlbackup/ -mtime 3 | xargs rm

Qualquer ajuda seria benéfica, mesmo que seja um indicador de como fazer melhor.

    
por Tim Meers 29.10.2010 / 15:03

5 respostas

8

Aqui está um script de backup / manutenção que eu uso:

#!/usr/bin/sh
#backup all mysql databases
# list MySQL databases and dump each
DIR=
DATESTAMP=$(date +%Y%m%d)
DB_USER=
DB_PASS=

# remove old backups
find ${DIR} -type f -mtime +5 -exec rm -rf {} \;


DB_LIST='mysql -u $DB_USER -p"$DB_PASS" -e'show databases;''
DB_LIST=${DB_LIST##Database}
for DB in $DB_LIST;
do
  FILENAME=${DIR}${DB}-${DATESTAMP}.sql.gz
  mysqldump -u $DB_USER -p"$DB_PASS" --opt --flush-logs $DB | gzip > $FILENAME
done

mysqlcheck -u $DB_USER -p"$DB_PASS" --all-databases > /root/mysql_backups/check_errors-${DATESTAMP}.log

Este script gera um backup gzipado individual de cada banco de dados para que você não precise restaurar os bancos de dados do servidor inteiro se houver apenas um problema com um banco de dados. Ele também inclui alguma sanidade de verificação do mysql e encontra backups de banco de dados antigos e os exclui.

Para restaurar, conforme solicitado:

Eu tive que restaurar algumas vezes. Acontece.

gunzip backup_file.sql.gz
mysql -u <username> -p  <database_name> < backup_file.sql 

Há provavelmente uma maneira mais "de uma linha" de fazer isso ... mas é assim que funciona para mim.

    
por 29.10.2010 / 15:57
2
#!/bin/sh
date='date -Iminutes'
find /var/sqlbackup/ -name 'sqlbackup-*' -mtime +2 -delete
mysqldump --all-databases -pmypassword | gzip > /var/sqlbackup/sqlbackup-$date.sql.gz

Você pode canalizar para gzip para compactar.

Mudei o find para antes do mysqldump. Não tenho certeza de quão grandes são os bancos de dados, mas ajudará a manter o uso do disco inativo e evitará problemas de espaço.

Geralmente, é melhor usar -mtime +2 em vez de -mtime 3 para afetar qualquer coisa com mais de dois dias em vez de arquivos exatamente com três dias de idade. Desta forma, se o seu cron perder um dia, você não recebe arquivos antigos perdidos pela exclusão.

Pessoalmente, prefiro restringir find a um padrão de nome também, para garantir que você não esteja excluindo nada inesperadamente.

A opção -delete em find é útil se você não quiser usar xargs . Ambas as formas funcionarão, mas eu prefiro usar menos comandos quando possível.

    
por 29.10.2010 / 16:13
0

Você pode adicionar gzip /var/sqlbackup/sqlbackup-$date.sql ao final do seu script.

    
por 29.10.2010 / 15:06
0

Tente isto:

date='date -Iminutes'
mysqldump --all-databases -pmypassword | gzip > /var/sqlbackup/sqlbackup-$date.gz
    
por 29.10.2010 / 15:06
0

Você já olhou para o irsync por redes R-FX?

Um ótimo pequeno script que lhe permitirá tirar cópias e gzips quentes de seus bancos de dados e enviá-lo para um servidor remoto. :)

    
por 29.10.2010 / 16:41

Tags