Data

28 abr, 2008

Configurando sistema de backup do banco de dados MySQL no Amazon S3 em 10 minutos

Publicidade

Este artigo é um passo-a-passo para instalação do sistema AutoMySqlBackup em conjunto com um script de sincronização de diretórios no Amazon S3, para realizar backup dos bancos de dados MySQL.

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.

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.

1.	$ 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

1.	$ mkdir -p /usr/local/scripts
2.	$ cd /usr/local/scripts
3.	$ 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:

1.	# Mail setup
2.	# What would you like to be mailed to you?
3.	# - log   : send only log file
4.	# - files : send log file and sql files as attachments (see docs)
5.	# - stdout : will simply output the log to the screen if run manually.
6.	# - quiet : Only send logs if an error occurs to the MAILADDR.
7.	MAILCONTENT="log"
8.	 
9.	# Separate backup directory and file for each DB? (yes or no)
10.	SEPDIR=yes
11.	 
12.	# Additionally keep a copy of the most recent backup in a seperate directory.
13.	LATEST=yes

Coloque o script para rodar no cron diariamente.

1.	$ cd /etc/cron.daily
2.	$ 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.

1.	$ sudo apt-get install ruby libopenssl-ruby

Confirme a versão do ruby:


1.	$ ruby -v
2.	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

1.	$ cd /usr/local/scripts

Faça o download e descompacte:

1.	$ wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
2.	$ tar xvzf s3sync.tar.gz

Remova o arquivo compactado:

1.	$ rm s3sync.tar.gz

Crie um diretório para os certificados e baixe alguns:

1.	$ cd s3sync
2.	$ mkdir certs
3.	$ cd certs
4.	$ wget http://mirbsd.mirsolutions.de/cvs.cgi/~checkout~/src/etc/ssl.certs.shar

Rode o instalador dos certificados.

1.	$ 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

1.	#!/bin/bash
2.	cd /usr/local/scripts/s3sync
3.	export AWS_ACCESS_KEY_ID=yourS3accesskey
4.	export AWS_SECRET_ACCESS_KEY=yourS3secretkey
5.	export SSL_CERT_DIR=/usr/local/scripts/s3sync/certs
6.	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:

1. # Command run after backups (uncomment to use)

2. POSTBACKUP=”/usr/local/scripts/automysqlbackup-upload-to-s3.sh”

[b][i]Parabéns, você já está com um backup seguro e eficiente!

Abraços e até a próxima.[/i][/b]