Como Fazer um Backup Online no MySQL
No último artigo "Técnicas de backup e restauração de dados no MySQL"
foram apresentadas
as formas de se fazer um backup consistente do seu banco de dados, bem
como a utilização
deste backup para a recuperação da base de dados. A principal
desvantagem daquelas técnicas
é o fato de que os bancos de dados ficam indisponíveis para alterações
durante a execução
da rotina de backup. Neste artigo vamos apresentar uma forma simples de
se fazer backup
online utilizando o mysqldump.
O problema crítico no backup online é garantir que todas as alterações
realizadas durante a
geração do backup estarão presentes na imagem gerada. A cópia de
arquivos ou a leitura da
base para exportação via SQL ou texto é realizada de forma sequencial,
sendo assim pode
ocorrer uma inserção em uma tabela que já foi incluída no backup, e esta
alteração não estará
presente no backup. Isto gera uma cópia inconsistente da sua base de
dados, inpossibilitando
a restauração completa da base. Podemos contornar esta situação no MySQL
utilizando os
arquivos de logs binários para armazenar estes dados durante o backup.
Imaginemos a seguinte
situação: o MySQL está escrevendo o log binário mysql-bin.014, lembre-se
de que os logs são
sempre sequenciais, e desejamos iniciar um backup online. Para garantir
que teremos no backup
todos os dados, criamos um novo log no início da execução da rotina de
backup, da seguinte
forma:
shell>mysqldump --all-databases -F > backup-online.sql
A opção -F do mysqldump força a criação de um novo arquivo de log antes
que se inicie a geração
do dump em SQL, no nosso exemplo cria-se o arquivo mysql-bin.015. A
opção --all-databases
indica que todos os bancos de dados serão copiados. No exemplo todas as
alterações que estão
ocorrendo concomitantemente ao procedimento de backup estão sendo
armazenadas neste log
gerado (mysql-bin.015). É importante ressaltar que alguns dados estarão
presentes apenas neste
log, enquanto outros estarão contidos no log e no arquivo de backup
(backup-online.sql). Ao final
da execução do mysqldump, executamos um comando FLUSH LOGS para criar um
novo log
(mysql-bin.016), que armazenará todas as alterações realizadas após a
realização do backup:
shell>mysql -e "FLUSH LOGS"
Feito isto, você terá que armazenar no seu backup o arquivo
backup-online.sql, que contém os
dados em formato SQL e o arquivo mysql-bin.015, que contém as alterações
realizadas durante a
execução do mysqldump. Com isto, está garnatido que você possui uma
cópia fiel da sua base de
dados mesmo tendo ocorrido alterações em parelelo com a execução do
mysqldump. Para restaurar
a base de dados utilizando este backup você deverá restaurar primeiro a
estrutura do banco contida
no arquivo SQL. Em seguida, você deve executar o log mysql-bin.015
armazernado em seu backup,
recuperando assim as informações alteradas durante a execução da rotina
de backup. E finalmente,
você deverá executar os logs a partir do mysql-bin.016 para recuperar
todas as informações
adicionadas no intervalo entre o backup e a falha ocorrida no sistema. A
execução da restauração
se daria da seguinte forma:
shell>mysql < backup-online.sql
shell>mysqlbinlog mysql-bin.015 > dump.015
shell>mysql -f < dump.015
shell>mysqlbinlog mysql-bin.016 > dump.016
shell>mysql < dump.016
Observe que durante a execução do log mysql-bin.015 foi utilizada a
opção -f do mysql, para que
o mysql ignore os eventuais erros de execução dos comandos
presentes no
arquivo de log. Isto é
necessário, já que neste log podem existir inserções que já haviam sido
colocadas no arquivo de
backup (.sql). Assim, na restauração deste log teríamos inserções
duplicadas para alguns registros,
mas estas podem ser ignoradas já que as mesmas já estavam contidas no
backup. Depois disto
executamos o próximo log para restaurar os dados alterados após o
backup, tendo finalmente a
base de dados na situação em que a mesma se encontrava no momento
anterior à situação de erro.
Para quem utiliza o InnoDB, existe uma ferramenta InnoDBHotBackup, que é
comercializada através
do site do InnoDB (www.innodb.com). Esta ferramenta realiza um
procedimento de backup online
para tabelas InnoDB, para maiores informações sobre o produto acesse o
site do InnoDB.
Abraços e até breve!
Eber M. Duarte
|
|
Eber
Duarte é bacharel em Ciência da Computação,
pós-graduado em Engenharia Elétrica e MySQL Professional
Certified. Trabalha há 3 anos na EAC Software (BH/MG) como Analista
e desenvolvedor de sistemas, atuando especialmente no desenvolvimento
de sistemas Web. Atualmente, também é consultor
e instrutor do banco de dados MySQL.
Contatos: eber@eacnet.com.br
www.mysqlbrasil.com.br ou www.eacsoftware.com.br
|
|