Home > Blog de Apoio e Recuperação > Software de backup para MySQL. Soluções de backup automático para MySQL.

Software de backup para MySQL. Soluções de backup automático para MySQL.

Atualizado 9th janeiro 2023, Rob Morrison

A necessidade de backups do banco de dados MySQL não é tão universal quanto a necessidade de backups regulares para usuários finais, mas quando necessário, torna-se uma parte especialmente importante da infraestrutura de uma empresa. O módulo do Bacula Enterprise para backups do MySQL permite aos usuários fazer backups e restaurações desse banco de dados de maneira fácil e eficiente, e mais importante ainda, em um tempo muito curto. Isso, é claro, é fundamental para o cumprimento de qualquer RTO (recovery time objectives). Esse artigo se aprofunda na própria natureza de um processo automático de backup do MySQL, incluindo abordagens gratuitas e pagas de backup e recuperação, e diferentes opções de personalização.

Diferentes maneiras de criar um backup do banco de dados MySQL

Antes de passarmos para a solução do Bacula Enterprise, vamos rever algumas das maneiras diferentes e não convencionais de criar um backup do banco de dados MySQL.

1. Backup automático do banco de dados MySQL baseado em Linux

Um certo utilitário baseado em Linux/Unix com o nome cron pode fazer backups do MySQL nesses sistemas. Ele é um utilitário relativamente simples que inicia com o sistema e lê suas instruções a partir de um arquivo específico. Esse arquivo de configuração é geralmente armazenado em /etc/crontab. Aqui está um exemplo de um backup configurado para 2:30 da manhã:

 

30 2 * * * root mysqldump -u root -pPASSWORD –all-databases | gzip >
/mnt/disk2/database_`data ‘ %m-%d-%Y’`.sql.gz

Os primeiros cinco dígitos do comando representam a hora e a data (minutos, horas, dias do mês, meses, dias da semana, respectivamente), e colocar “*” em vez de um desses números significa que qualquer número funciona.

2. Usando PHP para criar um arquivo XML

Também é possível recriar seu banco de dados como um arquivo XML, com a ajuda do PHP. Não é o formato mais seguro do mundo quando se trata de restaurar seus dados, mas algumas pessoas o preferem em relação a qualquer outra coisa. Esse trecho de código abaixo deve permitir à você exportar um banco de dados específico no arquivo com formato .XML:

 

//connect
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);

//get all the tables
$query = ‘SHOW TABLES FROM ‘.$name;
$result = mysql_query($query,$link) or die(‘cannot show tables’);
if(mysql_num_rows($result))
{
            //prep output
            $tab = “\t”;
            $br = “\n”;
            $xml = ‘<?xml version=”1.0″ encoding=”UTF-8″?>’.$br;
            $xml.= ‘<database name=”‘.$name.'”>’.$br;            

            //for every table…
            while($table = mysql_fetch_row($result))
            {
                        //prep table out
                        $xml.= $tab.'<table name=”‘.$table[0].'”>’.$br;                       

                        //get the rows
                        $query3 = ‘SELECT * FROM ‘.$table[0];
                        $records = mysql_query($query3,$link) or die(‘cannot select from table: ‘.$table[0]);                       

                        //table attributes
                        $attributes = array(‘name’,’blob’,’maxlength’,’multiple_key’,’not_null’,’numeric’,’primary_key’,’table’,’type’,’default’,’unique_key’,’unsigned’,’zerofill’);
                        $xml.= $tab.$tab.'<columns>’.$br;
                        $x = 0;
                        while($x < mysql_num_fields($records))
                        {
                                    $meta = mysql_fetch_field($records,$x);
                                    $xml.= $tab.$tab.$tab.'<column ‘;
                                    foreach($attributes as $attribute)
                                    {
                                               $xml.= $attribute.’=”‘.$meta->$attribute.'” ‘;
                                    }
                                    $xml.= ‘/>’.$br;
                                    $x++;
                        }
                        $xml.= $tab.$tab.'</columns>’.$br;                       

                        //stick the records
                        $xml.= $tab.$tab.'<records>’.$br;
                        while($record = mysql_fetch_assoc($records))
                        {
                                    $xml.= $tab.$tab.$tab.'<record>’.$br;
                                    foreach($record as $key=>$value)
                                    {
                                               $xml.= $tab.$tab.$tab.$tab.'<‘.$key.’>’.htmlspecialchars(stripslashes($value)).'</’.$key.’>’.$br;
                                    }
                                    $xml.= $tab.$tab.$tab.'</record>’.$br;
                        }
                        $xml.= $tab.$tab.'</records>’.$br;
                        $xml.= $tab.'</table>’.$br;
            }
            $xml.= ‘</database>’;           

            //save file
            $handle = fopen($name.’-backup-‘.time().’.xml’,’w+’);
            fwrite($handle,$xml);
            fclose($handle);
}

3. Usando o PHP como um método de backup

Uma outra maneira de usar o PHP para suas necessidades de backup é pegar uma consulta de backup de banco de dados de um arquivo PHP e usá-la. A query no exemplo a seguir é SELECT INTO OUTFILE.

 

<?php
include ‘config.php’;
include ‘opendb.php’; 

$tableName  = ‘mypet’;
$backupFile = ‘backup/mypet.sql’;
$query      = “SELECT * INTO OUTFILE ‘$backupFile’ FROM $tableName”;
$result = mysql_query($query); 

include ‘closedb.php’;
?>

E, é claro, você também precisará de uma maneira de restaurar esse tipo de backup. Nesse caso, a query é LOAD DATA INFILE:

 

<?php
include ‘config.php’;
include ‘opendb.php’; 

$tableName  = ‘mypet’;
$backupFile = ‘mypet.sql’;
$query      = “LOAD DATA INFILE ‘backupFile’ INTO TABLE $tableName”;
$result = mysql_query($query); 

include ‘closedb.php’;
?>

4. Backup usando SSH

O backup via SSH é possível mesmo para um banco de dados MySQL particularmente grande. Em seu painel Plesk, comece por permitir o acesso via shell, e depois use qualquer ferramenta que possa obter acesso ao servidor em questão via SSH (PuTTY ou ferramenta similar). Porém, primeiro, você terá que especificar um diretório de destino para seu futuro backup:

 

CD wwwroot/dbbackup

E então você usará o mysqldump para exportar seu banco de dados em um arquivo específico dentro de um servidor:

 

mysqldump –add-drop-table -u db_username -p db_name > mybackup.sql

5. Usando Shell Script para fazer backup de um banco de dados MySQL via Ubuntu

Se você tem um servidor VPS dedicado com Ubuntu Linux, então tem outra opção de backup. Você pode usar um shell script específico para fazer backup de todos os seus bancos de dados em seu servidor FTP. Aqui está um exemplo:

 

#!/bin/bash
### MySQL Server Login Info ###
MUSER=”root”
MPASS=”MYSQL-ROOT-PASSWORD”
MHOST=”localhost”
MYSQL=”$(which mysql)”
MYSQLDUMP=”$(which mysqldump)”
BAK=”/backup/mysql”
GZIP=”$(which gzip)”
### FTP SERVER Login info ###
FTPU=”FTP-SERVER-USER-NAME”
FTPP=”FTP-SERVER-PASSWORD”
FTPS=”FTP-SERVER-IP-ADDRESS”
NOW=$(date +”%d-%m-%Y”)

### See comments below ###
### [ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/* ###
[ ! -d “$BAK” ] && mkdir -p “$BAK”

DBS=”$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse ‘show databases’)”
for db in $DBS
do
FILE=$BAK/$db.$NOW-$(date +”%T”).gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done 

lftp -u $FTPU,$FTPP -e “mkdir /mysql/$NOW;cd /mysql/$NOW; mput /backup/mysql/*; quit” $FTPS

Depois que você tiver terminado de salvar esse segmento como um arquivo .sh, o próximo passo é estabelecer o nível de permissão correto para esse arquivo específico:

 

$ chmod +x /home/your-name/mysql.backup.sh

De agora em diante, você poderá inserir um dos dois comandos para iniciar seu processo de backup:

 

/home/your-name/mysql.backup.sh

Ou:

 

sudo /home/your-name/mysql.backup.sh

Você também pode configurar esse script para ser executado como um cron job. Aqui está um exemplo de script que funciona diariamente à meia-noite e consiste em dois comandos diferentes:

 

$ sudo crontab -e

E:

 

@midnight /home/you/mysql.backup.sh >/dev/null 2>&1

É possível que esses scripts funcionem também com diferentes distribuições UNIX ou Linux.

6. Usando a phpMyAdmin

phpMyAdmin é uma ferramenta de código aberto que também é gratuita, e funciona com bancos de dados MySQL e MariaDB. A ordem correta dos passos necessários é o seguinte:

  • Abrir a ferramenta em questão;
  • Selecionar o banco de dados do qual deseja criar um backup;
  • Selecionar a opção “export” na barra de navegação;
  • Clicar na linha “display all possible options”;
  • Escolher as tabelas específicas que deseja fazer backup;
  • Mudar o tipo de compressão (ou deixar em gzipped, que é o mais recomendado);
  • Iniciar o backup clicando no botão “go”.

Isso conclui nossa lista das opções de backup relativamente mais populares para suas necessidades básicas de backup do banco de dados MySQL.

A finalidade do módulo de backup para MySQL com o Bacula Enterprise

O objetivo geral do módulo de backup para MySQL do Bacula Enterprise é automatizar os processos de backup e restauração. Ao usar esse módulo, o administrador de backup não precisa conhecer todos os detalhes das técnicas de backup do MySQL, e também não há nenhuma exigência de habilidade para escrever scripts. O módulo em si é capaz de executar uma variedade de funções diferentes, incluindo backup automático para arquivos de configuração e outros dados importantes do sistema. Existem dois métodos principais de backup: dump e binary.

Binary ou Dump?

Como há duas técnicas principais de backup, é melhor apresentar uma comparação direta de algumas de suas características em uma tabela abaixo.

Funcionalidades Binary Dump
Restauração de um único objeto Não Sim*
Tamanho do backup Grande Pequeno
Velocidade de backup Rápido Lento
Velocidade de restauração Rápido Muito lento
Capaz de restaurar a qualquer momento Sim Sim
Suporte para backup diferencial e incremental Sim Sim
Consistência Sim Sim
Backup online Sim Sim
Restauração à versão anterior principal do MySQL Não Sim**
Restauração de uma versão mais recente do MySQL Não Sim

* A edição manual de um arquivo dump é necessária para realizar uma restauração de um único objeto.

** A edição manual do arquivo SQL pode ser necessária para restaurar um SQL dump para uma versão mais antiga do MySQL, se você estiver usando recursos que não estão disponíveis na versão mais antiga. Em geral, a restauração para uma versão mais antiga do MySQL não é garantida e não é suportada.

Como funciona: Modo binary

O princípio central do modo binário é sua interação com o Percona XtraBackup, que lhe permite realizar o processo de backup sem precisar pará-lo para começar. Ele consegue trabalhar com InnoDB, XtraDB, MyISAM e outras tabelas de um MySQL não modificado, ou com um servidor Percona do XtraDB.

Anteriormente, havia duas formas principais de se fazer uma cópia de um banco de dados. A primeira implicava em copiar o banco de dados ativo, e esse método tinha uma grande chance de ter todo tipo de discrepâncias na cópia, ou ficar faltando todas as mudanças que aconteceram enquanto a cópia estava sendo criada. A segunda implicava em parar completamente o banco de dados para fazer uma cópia consistente. Mas o problema com essa segunda maneira é que potencialmente (e geralmente) cada segundo em que o banco de dados de uma empresa não funciona representa uma perda de receita, não importa quão pequeno seja esse período de parada.

Para esse exato propósito, o módulo MySQL Percona do Bacula e a ferramenta Percona XtraBackup oferece uma solução efetiva para esse problema, tendo a capacidade de criar backups completos ou incrementais de qualquer tipo de banco de dados MySQL ativo e em funcionamento. Uma outra vantagem do modo Percona conectado é que ele não precisa usar grandes arquivos temporários, que são as cópias dos dados que você está fazendo backup ou restaurando.

O processo de restauração é relativamente simples, com os dados sendo restaurados para um local temporário e depois alterados para serem consistentes com a ajuda da função “prepare”. Essa função seria, com outras soluções, muito pesada em termos de recursos, e não algo que você desejaria realizar durante uma situação de recuperação urgente. Portanto, para evitar acrescentar muito tempo ao processo de restauração, a função “prepare” do Bacula é executada automaticamente e com antecedência, logo após a criação do backup. Isso acrescenta um pouco de tempo ao processo de backup, mas torna o processo de restauração muito mais rápido. Em caso de emergências, o tempo de restauração é muito mais crítico do que o tempo de backup. E numa situação em que o banco de dados em questão é extremamente grande e de alta transação, esse pequeno aumento de tempo pode até mesmo ser a diferença para uma organização permanecer em atividade.

A necessidade dessa combinação do módulo MySQL Percona do Bacula Enterprise e das ferramentas Percona vem da existência problemática do MySQL tradicional. O principal problema de criar um “mysqldump” é que ele não é um verdadeiro binary backup dos dados. De fato, o processo consiste na conversão de todo o banco de dados na grande quantidade de instruções SQL e seu processamento posterior como parte do processo de restauração. Esse processo, exatamente assim, vai ficando mais lento à medida que seu banco de dados cresce.

As ferramentas Percona são úteis quando há uma situação que coloca uma carga pesada sobre o MySQL e, tanto o desempenho, quanto a estabilidade são necessários para que o sistema funcione corretamente.

Qualquer empresa que precise restaurar seu servidor com segurança e rapidez para proteger seus negócios de falhas graves, ou mesmo ir à falência, pode tirar vantagem dessa combinação especial de ferramentas Percona com as funcionalidades do Bacula para tornar o processo de restauração o mais rápido possível em um ambiente empresarial.

Como funciona: Modo Dump

O modo dump é mais ou menos a opção de backup “legado” que ainda é relevante em casos específicos. Ele se baseia nos arquivos de log que são criados no processo de existência do banco de dados MySQL, e esses logs são utilizados pelo sistema de recuperação point in time para realizar várias coisas com seus dados, como replicação, proteção, e assim por diante.

O método padrão de backup é fazer dump de cada um de seus bancos de dados separadamente, o que significa que seus dados não serão completamente consistentes se você restaurar vários bancos de dados que foram copiados em diferentes períodos e não têm consistência entre si. Essa é uma questão significativa se você estiver trabalhando com vários bancos de dados ao mesmo tempo, e a solução do Bacula para isso é salvar os arquivos de log que são gerados durante cada um dos processos de backup e depois reproduzir esses arquivos para garantir que todos os bancos de dados sejam globalmente consistentes uns com os outros ao mesmo tempo.

Há também outra solução, mais global, para o problema: a opção all_databases. Ela permite que seja feito dump de todos os bancos de dados de uma só vez, permitindo que você tenha certeza de que seus bancos de dados são consistentes e consiga fazer múltiplos backups incrementais após esse completo, sem medo de inconsistências globais.

Há uma lista específica de arquivos que o agente MySQL gera no catálogo Bacula para um único “teste” de seu banco de dados. Você pode ver essas entradas de arquivos e para que eles são necessários na tabela abaixo.

Nome do arquivo Aplicação Descrição
global-grants.sql global Lista unificada que especifica todos os usuários, suas senhas e outros dados específicos
createdb.sql banco de dados Script sobre a criação do banco de dados
grants.sql banco de dados Uma lista que especifica cada usuário que está associado a esse banco de dados
data.sql banco de dados Os dados de seu banco de dados em formato dump
settings.txt global Variáveis atuais do servidor MySQL
schema.sql banco de dados Script sobre a criação do esquema do banco de dados
my.cnf global Dados de configuração do servidor para o MySQL

Modos de restauração MySQL

O agente MySQL do Bacula é capaz de fornecer vários modos diferentes de restauração, como por exemplo:

  • Restauração de banco de dados individual;
  • Restauração de logs dump ou binary;
  • Restauração point in time;
  • Restauração de usuários e funções.

Como mencionado, o Bacula Enterprise utiliza ferramentas Percona com seu agente MySQL para restaurar qualquer informação através de um backup em modo binário.

Conclusão

Novas tecnologias são desenvolvidas em todos os ambientes o tempo todo. Por esse motivo, a maioria das empresas se beneficia de uma solução de backup que inova regularmente, e assegura que ela possa abranger todos os tipos de tecnologias em um departamento de TI ou data center , sejam essas tecnologias novas ou antigas. O resultado do uso de uma solução de backup moderna e inovadora é normalmente RTOs e RPOs mais curtos, menor manutenção, menores custos, e muito mais segurança. O Bacula Enterprise é um bom exemplo desse tipo de provedor de soluções de backup.

Sobre o autor
Rob Morrison
Rob Morrison é o diretor de marketing da Bacula Systems. Ele começou sua carreira de marketing de TI na Silicon Graphics, na Suíça, e desempenhou intensamente várias funções de administração de marketing por quase 10 anos. Nos 10 anos seguintes, Rob também ocupou vários cargos de administração de marketing na JBoss, Red Hat e Pentaho, assegurando o crescimento da participação no mercado dessas empresas reconhecidas. Ele é formado pela Universidade de Plymouth e tem um diploma de honras em mídia digital e comunicação, além de ter feito um programa de estudos no exterior.
Deixe um comentário

Seu e-mail não será publicado. Os campos obrigatórios estão marcados com *