O MySQL tem um utilitário muito utilizado para backups, sendo bastante versátil para bases pequenas, que é o mysqldump. Mas quando se tem uma base grande e de alta criticidade, ou seja, não pode parar de maneira alguma, aí aparecem os problemas com o utilitário mysqldump. Podemos contar alguns de seus principais problemas:
- Lento para fazer backup de grandes bases;
- Lento para efetuar restore, principalmente quando se usa InnoDB;
- O conteúdo do backup, como o próprio nome da ferramenta sugere, é um DUMP, é todo em texto ASCII, o que o torna inseguro e pesado, já que a leitura e gravação de dados em ASCII é bem mais lenta do que em binários;
- E o principal: trava as tabelas durante o backup, tornando partes do banco temporariamente indisponíveis.
Existe uma ferramenta paga, conhecida como MySQL Enterprise Backup, que realiza os backups “no quente”, sem travamentos e garante sua consistência. O grande problema, é que essa ferramenta é paga e cara, nem todo mundo está disposto a pagar.
Mas, para a felicidade de todos, existe um clone Open Source do MySQL Enterprise Backup chamado de XtraBackup desenvolvido pela Percona, uma empresa especializada em consultoria de banco de dados MySQL. O mesmo está disponível para uma variedade de distribuições Linux, bastando acessar o site do produto para obter informações de instalação.
Neste artigo não irei abordar a instalação do produto, pois a mesma pode variar de acordo com sua plataforma.
Mãos à Obra
Uma vez instalado, tomaremos como base o comando abaixo para a realização do backup:
# innobackupex –stream=tar –defaults-file=/etc/my.cnf –user=usuario –password=senha ./ | gzip -c -9 > $BDIR/backup.`date +%m%d%Y%H%M%S`.tar.gz
Agora aguarde o resultado, se tudo ocorrer bem, seu backup será executado como previsto.
Abaixo, um pequeno script para ajudar a automatizar as coisas, podendo ser inclusive agendado no crontab para sua execução automática:
#!/bin/bash
# 19022012 – Written by Ramon Gadelha
# This script uses xtrabackup utility to hot backup mysql databases in a non-halt mode
BDIR=”/home/backup/mysql”
USER=”xtrabackup”
PASSWORD=”xtrabackup”
CONFIG=”/etc/my.cnf”
# Run backup
innobackupex –stream=tar –defaults-file=$CONFIG –user=$USER –password=$PASSWORD ./ | gzip -c -9 > $BDIR/backup.`date +%m%d%Y%H%M%S`.tar.gz
# Remove backups older than 7 days
find $BDIR -name backup.\* -ctime +7 -exec rm {} \;
Espero que esse artigo tenha lhe sido útil.
Pingback: XtraBackup: backup no MySQL “no quente”, sem read lock | Linux Ajuda
Muito legal mas faltou uma explicação de como recuperar o backup.
Tudo bem que a documentação tá aí pra isso mas vejo que ficou incompleto o seu artigo.
A proposta do artigo em sí, é apenas a realização do backup, pois como você mesmo disse existe a documentação completa da Percona que explica inclusive o restore. Mas nada me impede de complementar este com outro artigo explicando sobre como realizar o restore, vou tomar seu comentário como uma sugestão, muito grato!
Otimo artigo. Mas vale lembrar que este “backup” consome muita CPU, estou testnado em uma maquina e a mesma esta simplesmente sendo ‘estuprada’ pelo processo.
Mas mesmo assim vale a pena. Vou testar e uma maquina muti-core.
Att
Os testes que realizei, foram em máquinas multi-core de 8 e 16 nucleos, então não tive muito problemas com utilização de CPU. Mas acredito que mesmo provocando um alto consumo de CPU e consequentemente causando algum problema de performance temporário, seja melhor do que um travamento das tabelas provocado pelo mysqldump.
Parabéns pelo artigo, mas também senti falta da recuperação do backup, abraço!