Configurando sistema de backup do banco de dados MySQL no Amazon S3 em 10 minutos
Por indicação do William, passei a usar o AutoMySQLBackup em conjunto com um script de sincronização de diretórios no Amazon S3, para realizar backup dos bancos de dados MySQL dos servidores dedicados da BielSystems.
Este script é bem completo e tem tudo que alguém pode precisar para um sistema de backup eficiente e seguro em ambiente de produção.
Abaixo segue o “pacacá” de instalação:
Por motivos de segurança, sugiro que você crie um usuário somente para backup, que tenha permissão apenas de leitura (SELECT). Para fazer isso, conforme sugerido aqui, rode o comando abaixo no servidor que possui o MySQL instalado.
$ mysql -u root -p -e "GRANT SELECT, LOCK TABLES ON *.* TO 'backup'@'localhost' IDENTIFIED BY 'escolha-uma-senha';"
Depois disso baixe o script AutoMySQLBackup no seu diretório de scripts, por exemplo, /usr/local/scripts
$ mkdir -p /usr/local/scripts
$ cd /usr/local/scripts
$ wget -c http://ufpr.dl.sourceforge.net/sourceforge/automysqlbackup/automysqlbackup.sh.2.5
Edite o arquivo com seu editor preferido (ex: nano -w automysqlbackup.sh.2.5) e configure os parâmetros. Fora os parâmetros de acesso ao banco de dados (lembre-se de usar o usuário backup que foi criado no passo anterior), sugiro a alteração destes parâmetros:
# Mail setup
# What would you like to be mailed to you?
# - log : send only log file
# - files : send log file and sql files as attachments (see docs)
# - stdout : will simply output the log to the screen if run manually.
# - quiet : Only send logs if an error occurs to the MAILADDR.
MAILCONTENT="log"
# Separate backup directory and file for each DB? (yes or no)
SEPDIR=yes
# Additionally keep a copy of the most recent backup in a seperate directory.
LATEST=yes
Coloque o script para rodar no cron diariamente.
$ cd /etc/cron.daily
$ ln -s /usr/local/scripts/automysqlbackup.sh.2.5 automysqlbackup
Enviando os arquivos de backup para uma conta no Amazon S3
Para enviar o backup realizado para um conta no Amazon S3, que é o web service de storage da Amazon, siga as instruções abaixo que foram retiradas deste link.
Antes de mais nada, instale o ruby 1.8.4 ou mais novo e a biblioteca de ssl para o ruby.
$ sudo apt-get install ruby libopenssl-ruby
Confirme a versão do ruby
$ ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-linux]
Agora vamos instalar o s3sync que é um script de sincronização de diretórios locais com diretórios no S3.
Vá para o diretório que você deseja instalar o s3sync, como por exemplo /usr/local/scripts
$ cd /usr/local/scripts
Faça o download e descompacte:
$ wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
$ tar xvzf s3sync.tar.gz
Remova o arquivo compactado:
$ rm s3sync.tar.gz
Crie um diretório para os certificados e baixe alguns:
$ cd s3sync
$ mkdir certs
$ cd certs
$ wget http://mirbsd.mirsolutions.de/cvs.cgi/~checkout~/src/etc/ssl.certs.shar
rode o instalador dos certificados
$ sh ssl.certs.shar
Pronto, s3sync instalado!
Vamos agora criar um script que pega os últimos arquivos de backup e envia para a sua conta do S3.
Crie o arquivo de script com o conteúdo abaixo. Exemplo: /usr/local/scripts/automysqlbackup-upload-to-s3.sh
#!/bin/bash
cd /usr/local/scripts/s3sync
export AWS_ACCESS_KEY_ID=yourS3accesskey
export AWS_SECRET_ACCESS_KEY=yourS3secretkey
export SSL_CERT_DIR=/usr/local/scripts/s3sync/certs
ruby s3sync.rb -r --ssl --delete /backups/latest nomedobucket:backup/mysql
Observações:
- O comando --delete diz para o s3sync excluir os arquivos que existem no S3 mas não existem mais na pasta local.
- Para enviar somente os últimos backups (diretório latest), é necessário que o parâmetro LATEST seja igual a yes no AutoMySQLBackup
- Atenção para o nome do bucket, para os paths e principalmente para o path /backups/latest que deve conter o diretório que está configurado no parâmetro BACKUPDIR do AutoMySQLBackup concatenado com "/latest".
O último passo é configurar o AutoMySQLBackup para rodar o script de envio dos arquivos para o S3 logo após cada backup.
Para isso altere o parâmetro POSTBACKUP como o exemplo abaixo:
# Command run after backups (uncomment to use)
POSTBACKUP="/usr/local/scripts/automysqlbackup-upload-to-s3.sh"
Parabéns, você já está com um backup seguro e eficiente!
Abraços e até a próxima.