XtraBackup: backup no MySQL “no quente”, sem read lock

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.

6 thoughts on “XtraBackup: backup no MySQL “no quente”, sem read lock

  1. Pingback: XtraBackup: backup no MySQL “no quente”, sem read lock | Linux Ajuda

    • 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!

  2. 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.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s