Criando um Sistema de Backup Completo do MySQL com PHP (sem mysqlDump)

Introdução

Fazer backup de bancos de dados é uma prática essencial para garantir a segurança e a integridade dos dados em aplicações web. Neste post, vamos explorar como criar um sistema de backup completo do MySQL utilizando PHP, que exporta tanto a estrutura quanto os dados das tabelas. Este método é particularmente útil quando você deseja uma solução que funcione de forma programática e remota, sem depender de ferramentas externas como mysqldump.

Pré-requisitos

Antes de começar, você precisará ter:

  • Um servidor web com PHP e MySQL instalados.
  • Acesso ao banco de dados que deseja fazer o backup.

Conexão com o Banco de Dados

Primeiro, vamos estabelecer uma conexão com o banco de dados. O código abaixo configura as credenciais necessárias para a conexão:

$host = 'localhost';     // Endereço do banco de dados
$username = 'seu_usuario'; // Usuário do banco de dados
$password = 'sua_senha';   // Senha do banco de dados
$dbname = 'nome_do_banco'; // Nome do banco de dados

// Conecta ao banco de dados
$mysqli = new mysqli($host, $username, $password, $dbname);

// Verifica conexão
if ($mysqli->connect_error) {
    die("Erro na conexão: " . $mysqli->connect_error);
}

Exportando a Estrutura e Dados

Agora, vamos criar a rotina que fará o backup da estrutura e dos dados. O código a seguir gera um arquivo .sql com os comandos necessários para reconstruir o banco de dados:

// Inicializa variáveis para o backup
$backup = "-- Backup do banco de dados: $dbname\n";
$backup .= "-- Data: " . date('Y-m-d H:i:s') . "\n\n";

// Faz o backup de cada tabela
$tables = $mysqli->query("SHOW TABLES");
while ($row = $tables->fetch_array()) {
    $table = $row[0];

    // Exporta a estrutura da tabela
    $result = $mysqli->query("SHOW CREATE TABLE `$table`");
    $row2 = $result->fetch_assoc();
    $backup .= "-- Estrutura da tabela `$table`\n";
    $backup .= $row2['Create Table'] . ";\n\n";

    // Exporta os dados da tabela
    $result = $mysqli->query("SELECT * FROM `$table`");
    if ($result->num_rows > 0) {
        $backup .= "-- Dados da tabela `$table`\n";
        while ($row3 = $result->fetch_assoc()) {
            $backup .= "INSERT INTO `$table` VALUES(";
            $values = [];
            foreach ($row3 as $value) {
                $values[] = is_null($value) ? "NULL" : "'" . $mysqli->real_escape_string($value) . "'";
            }
            $backup .= implode(", ", $values) . ");\n";
        }
        $backup .= "\n";
    }
}

// Fecha a conexão
$mysqli->close();

// Define o nome do arquivo de backup
$backupFile = 'backup_' . date('Y-m-d_H-i-s') . '.sql';

// Salva o backup em um arquivo
file_put_contents($backupFile, $backup);

// Retorna o backup como download para o usuário, se for chamado via browser
header('Content-Type: application/sql');
header('Content-Disposition: attachment; filename="' . $backupFile . '"');
echo $backup;
exit();

Explicação do Código

  1. Conexão: O script se conecta ao banco de dados usando as credenciais fornecidas.
  2. Backup da Estrutura: Para cada tabela, o script obtém a estrutura utilizando o comando SHOW CREATE TABLE.
  3. Backup dos Dados: Ele percorre cada tabela, recupera os dados e cria comandos INSERT INTO para reimportá-los.
  4. Geração do Arquivo: O backup é salvo em um arquivo .sql, que é oferecido como download para o usuário.

Executando o Backup Remotamente

Você pode facilmente chamar este script via cURL ou acioná-lo através de um botão em uma interface web. Para executar via cURL, use:

curl -O http://seu-dominio.com/backup.php

Considerações Finais

Este método de backup em PHP é flexível e pode ser personalizado conforme as necessidades do seu projeto. Certifique-se de testar os backups regularmente e adaptar o script para incluir configurações específicas do seu ambiente.

Com isso, você terá uma solução robusta para proteger seus dados de forma prática e eficiente. Se você gostou deste post, não hesite em compartilhar suas experiências e dúvidas nos comentários!

Rolar para cima