edifonttes / mysql-backup-manager
Biblioteca PHP para backup de banco de dados MySQL com suporte a SQL e ZIP
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/edifonttes/mysql-backup-manager
Requires (Dev)
- phpunit/phpunit: ^9.5
Suggests
- google/apiclient: ^2.15 - Para integração com Google Drive
README
Biblioteca PHP 7.4+ para realizar backups de banco de dados MySQL com suporte a exportação em SQL e ZIP, além de integração com Google Drive.
📋 Requisitos
- PHP >= 7.4
- Extensão PDO MySQL
- Extensão ZIP
- Composer
🚀 Instalação
composer require edifonttes/mysql-backup-manager
Ou adicione manualmente ao seu composer.json:
{
"require": {
"edifonttes/mysql-backup-manager": "^1.0"
}
}
📖 Uso Básico
Backup em SQL
use MysqlBackup\BackupManager; use MysqlBackup\Config\BackupConfig; $config = new BackupConfig([ 'host' => 'localhost', 'database' => 'meu_banco', 'username' => 'root', 'password' => 'senha', 'backup_path' => __DIR__ . '/backups' ]); $manager = new BackupManager($config); $arquivo = $manager->backupToSql(); echo "Backup criado: {$arquivo}";
Backup em ZIP
$arquivo = $manager->backupToZip(); echo "Backup ZIP criado: {$arquivo}";
Backup com nome personalizado
$arquivo = $manager->backupToZip('meu_backup_2025.zip');
☁️ Integração com Google Drive
Preparação
- Crie um projeto no Google Cloud Console
- Ative a API do Google Drive
- Crie credenciais OAuth 2.0 ou Service Account
- Baixe o arquivo JSON de credenciais
Uso
use MysqlBackup\Storage\GoogleDriveStorage; $storage = new GoogleDriveStorage( '/caminho/para/credentials.json', 'ID_DA_PASTA_NO_DRIVE' // opcional ); // Integre com sua biblioteca do Google Drive // $storage->setDriveService($seuServicoDrive); $manager->setStorage($storage); $arquivo = $manager->backupToZip(); // Salva localmente E no Drive
⚙️ Configurações
Opções da BackupConfig
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
host |
string | localhost |
Host do banco de dados |
database |
string | '' |
Nome do banco de dados |
username |
string | root |
Usuário do banco |
password |
string | '' |
Senha do banco |
port |
int | 3306 |
Porta de conexão |
charset |
string | utf8mb4 |
Charset da conexão |
backup_path |
string | sys_get_temp_dir() |
Caminho para salvar backups |
🏗️ Estrutura do Projeto
src/
├── BackupManager.php # Gerenciador principal
├── Config/
│ └── BackupConfig.php # Configurações
├── Interfaces/
│ ├── ExporterInterface.php # Interface para exportadores
│ └── StorageInterface.php # Interface para storage
├── Exporters/
│ ├── SqlExporter.php # Exportador SQL
│ └── ZipExporter.php # Exportador ZIP
└── Storage/
└── GoogleDriveStorage.php # Storage Google Drive
🔧 Desenvolvimento
Instalação para desenvolvimento
git clone https://github.com/seu-usuario/mysql-backup.git
cd mysql-backup
composer install
Criando um novo Storage
Implemente a interface StorageInterface:
namespace MysqlBackup\Interfaces; interface StorageInterface { public function upload(string $filePath, string $filename): bool; }
Criando um novo Exporter
Implemente a interface ExporterInterface:
namespace MysqlBackup\Interfaces; interface ExporterInterface { public function export(string $filename): string; }
📝 Exemplos Avançados
Backup automático com Cron
// backup-cron.php require 'vendor/autoload.php'; $config = new MysqlBackup\Config\BackupConfig([ 'host' => getenv('DB_HOST'), 'database' => getenv('DB_NAME'), 'username' => getenv('DB_USER'), 'password' => getenv('DB_PASS'), 'backup_path' => '/var/backups/mysql' ]); $manager = new MysqlBackup\BackupManager($config); try { $arquivo = $manager->backupToZip(); echo date('Y-m-d H:i:s') . " - Backup realizado: {$arquivo}\n"; } catch (Exception $e) { echo date('Y-m-d H:i:s') . " - Erro: {$e->getMessage()}\n"; exit(1); }
Adicione ao crontab:
0 2 * * * /usr/bin/php /caminho/para/backup-cron.php >> /var/log/backup.log 2>&1
🐛 Tratamento de Erros
A biblioteca lança exceções RuntimeException em caso de erro:
try { $arquivo = $manager->backupToSql(); } catch (\RuntimeException $e) { error_log("Erro no backup: " . $e->getMessage()); // Implementar notificação, retry, etc. }
📄 Licença
MIT License - veja o arquivo LICENSE para detalhes.
🤝 Contribuindo
Contribuições são bem-vindas! Por favor, abra uma issue ou pull request.