Banco de dados

Como fazer backup do banco de dados com CodeIgniter

Realizar backup do banco de dados é uma tarefa muito importante no desenvolvimento de aplicações web.

Nem sempre o servidor onde a aplicação está hospedada possui backup automático em uma frequência de geração e armazenamento que atenda às necessidades da aplicação, e por isso é preciso implementar as rotinas de backup dentro da própria aplicação.

Com CodeIgniter realizar o backup do banco de dados é muito fácil, e você não precisa de nenhuma biblioteca de terceiro para construir a rotina.

Com poucas linhas de código é possível criar uma rotina que faça um backup completo do banco de dados e gere um arquivo compactado com as instruções SQL.

Veja a seguir um exemplo simples onde é gerado o backup do banco e logo em seguida o arquivo é disponibilizado para download.


// Carrega a classe DB utility 
$this->load->dbutil();

// Executa o backup do banco de dados armazenado-o em uma variável
$backup = $this->dbutil->backup();

// carrega o helper File e cria um arquivo com o conteúdo do backup
$this->load->helper('file');
write_file('/path/backup.gz', $backup);

// Carrega o helper Download e força o download do arquivo que foi criado com 'write_file'
$this->load->helper('download');
force_download('backup.gz', $backup);

Antes de criar a rotina de backup, verifique as configurações de tempo de execução de limite de memória do PHP, pois dependendo do tamanho do banco de dados da aplicação, podem ocorrer problemas por conta dessas configurações serem menores do que o necessário.

Ao utilizar $this->dbutil->backup(), é possível passar como parâmetro um array com configurações para realização do backup.

Veja a seguir quais são os parÂmetros de configuração que podem ser utilizados:


$bkpcf = array(
        'tables'        => array('tabela', 'tabela_2'),   // Lista de tabelas que serão adicionadas ao backup
        'ignore'        => array(),                       // Lista de tabelas que serão omitidas do backup
        'format'        => 'txt',                         // Formato do backup: gzip, zip, txt
        'filename'      => 'backup.sql',                  // Nome do arquivo (utilizado somente se o formato for ZIP)
        'add_drop'      => TRUE,                          // Adição de DROP TABLE
        'add_insert'    => TRUE,                          // Adição de INSERT (útil caso queira fazer o backup não só da estrutura, mas também dos dados)
        'newline'       => "\n"                           // Caracter usado para definir quebra de linha 
);

$this->dbutil->backup($bkpcf);

Dicas

Veja a seguir algumas dicas para a implementação de rotina de backup dentro da aplicação:

  • Utiliza tarefas agendadas (cron jobs) para execução das rotinas de backup
  • Dê a opção para o usuário fazer o download do arquivo de backup de dentro da aplicação (sem a necessidade de acessar via cliente FTP)
  • Sempre que possível, liste os backups disponíveis
  • Defina o intervalo de tempo que os arquivos de backup serão mantidos no servidor
  • Sempre que possível, permita ao usuário criar backups personalizados, escolhendo quais tabelas deverão ser adicionadas
  • Crie uma classe específica para executar essas rotinas
  • Nomeie os arquivos de backup usando a data da geração do mesmo, pois facilita a identificação e recuperação posterior

Mesmo o servidor onde a aplicação está armazenada tendo rotinas de backup automáticas, se puder adicionar a geração e listagem dos arquivos para execução manual é bastante interessante.

Bons estudos!