Voltar


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