Skip to content

Latest commit

 

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Backup Database PHP

Ferramenta em PHP para gerar backups completos de bancos MySQL/MariaDB em formato SQL, pensada para rodar em ambientes containerizados (Docker) com Apache e estrutura web mínima (front controller + controllers).

O projeto exporta a estrutura (CREATE TABLE) e os dados (INSERT) de todas as tabelas do banco configurado, gravando um arquivo .sql datado no diretório de execução.


Sumário


Visão geral

Este repositório combina:

  1. Motor de backup — conexão via PDO, leitura de metadados (SHOW TABLES, SHOW CREATE TABLE) e dump linha a linha com INSERT.
  2. Camada web leve — roteamento por URL amigável (.htaccessindex.php), resolução dinâmica de controllers e página 404.
  3. Empacotamento Docker — imagem php:7.4-apache com extensões pdo_mysql e zip, Composer e mod_rewrite habilitado.

Ideal para estudos, protótipos ou integração em pipelines onde um container PHP precisa disparar dumps SQL de forma programática.


Funcionalidades

Recurso Descrição
Dump SQL completo Gera arquivo AAAA-MM-DD.sql com DDL e DML
Todas as tabelas Itera SHOW TABLES e processa cada tabela
PDO + MySQL Conexão nativa com pdo_mysql
Roteamento MVC simples Controllers em App\Web\Controllers\
Docker pronto Dockerfile e configuração Apache incluídos
Autoload PSR-4 Namespace App\ mapeado para src/ via Composer

Fluxo web atual: index.php instancia Application, chama run()setApp() resolve o controller pela URL → HomeController::index() (ou 404).

Fluxo de backup: implementado em Application::boot() — conecta ao banco, cria o arquivo SQL e grava CREATE TABLE + INSERT por tabela. Para executar o backup hoje, é necessário invocar boot() explicitamente (por exemplo, estendendo run(), criando um controller dedicado ou um script CLI).


Requisitos

Desenvolvimento local

  • PHP 7.4+ (compatível com a imagem Docker do projeto)
  • Extensão pdo_mysql
  • Composer
  • Servidor web com mod_rewrite (Apache recomendado) ou equivalente
  • MySQL ou MariaDB acessível a partir do host/container

Docker

  • Docker Engine
  • (Opcional) Docker Compose, se você orquestrar o banco em outro serviço na mesma rede

Instalação

Clone o repositório e instale as dependências do Composer (autoload PSR-4):

git clone https://github.com/pedromoreira49/backup-database-php.git
cd backup-database-php
composer install

No Apache, aponte o DocumentRoot para a raiz do projeto e garanta que AllowOverride All esteja ativo para o .htaccess funcionar.


Execução com Docker

Build da imagem

docker build -t backup-database-php .

Run

docker run -d -p 8080:80 --name backup-app backup-database-php

A aplicação ficará disponível em http://localhost:8080.

Rede com o banco: o Dockerfile não inclui MySQL. O host do banco em Application.php (HOST) deve ser o IP/hostname do container MySQL na rede Docker (ex.: nome do serviço no Compose) ou host.docker.internal no Windows/macOS para um banco na máquina host.

Variáveis e credenciais

Hoje as credenciais estão definidas como constantes em src/Web/Application.php:

define('HOST', '172.17.0.3');
define('DB', 'testes');
define('USER', 'dbuser');
define('PASS', 'newpassword');

Ajuste esses valores antes do build ou monte um volume com o arquivo alterado. Para produção, recomenda-se migrar para variáveis de ambiente (.env) e nunca versionar senhas reais.


Configuração do banco

  1. Crie o banco e o usuário com permissão de leitura em todas as tabelas (SELECT, SHOW VIEW, etc.).
  2. Atualize HOST, DB, USER e PASS em Application.php (ou na camada de configuração que você adotar).
  3. Confirme conectividade a partir do container:
docker exec -it backup-app php -r "new PDO('mysql:host=SEU_HOST;dbname=SEU_DB', 'USER', 'PASS'); echo 'OK';"

O fuso horário da aplicação está definido como America/Sao_Paulo em Application.php.


Como funciona o backup

O método Application::boot() executa, em resumo:

  1. Abre conexão PDO com MySQL.
  2. Cria o arquivo YYYY-MM-DD.sql no diretório de trabalho atual.
  3. Para cada tabela:
    • Escreve comentário e SHOW CREATE TABLE (DDL).
    • Seleciona todas as linhas e gera comandos INSERT com valores escapados via PDO::quote.
  4. Fecha o arquivo e exibe mensagem de sucesso ou falha no output.

Exemplo de uso programático (após carregar o autoload):

<?php
require_once __DIR__ . '/vendor/autoload.php';

use App\Web\Application;

$app = new Application();
$app->boot();

Saída esperada: arquivo 2026-05-18.sql (data do servidor) contendo blocos por tabela, por exemplo:

-- TABLE: usuarios
CREATE TABLE `usuarios` ( ... );
INSERT INTO `usuarios` (`id`,`nome`) VALUES ('1','Exemplo');

Roteamento web

O .htaccess redireciona URLs inexistentes para index.php?url=...:

URL Controller Ação
/ HomeController index()
/qualquer-rota QualquerController se existir index()
Rota inexistente View 404.php

Convenção de classes: App\Web\Controllers\{Nome}Controller.

Exemplo atual da home: exibe Loading view — ponto de extensão para dashboard, agendamento ou download do último backup.


Estrutura do projeto

backup-database-php/
├── config/
│   └── apache.conf          # Virtual host / PHP no container
├── src/
│   └── Web/
│       ├── Application.php  # Bootstrap, rotas e lógica de backup
│       ├── Controllers/
│       │   └── HomeController.php
│       └── Views/
│           └── pages/
│               └── 404.php
├── index.php                # Front controller
├── .htaccess                # Rewrite rules
├── composer.json            # PSR-4: App\ → src/
├── Dockerfile
├── .dockerignore
└── README.md

Autor

Pedro Moreira

About

Script de backup para banco de dados.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages