Como Fazer Backup Automatizado de um Banco de Dados em Arquivo .sql com Python
Como Fazer Backup Automatizado de um Banco de Dados em Arquivo .sql com Python
A automação de backups é essencial para garantir a segurança da informação e a continuidade de negócios sem depender de rotinas manuais. Utilizando o módulo nativo
subprocess do Python, é possível invocar utilitários de linha de comando como mysqldump (MySQL/MariaDB) ou pg_dump (PostgreSQL) para exportar a estrutura e os dados do banco diretamente para um arquivo .sql compactado ou rotulado com data e hora.Python
import os
import subprocess
from datetime import datetime
def exportar_backup_sql():
# Configurações do banco de dados e diretório de destino
db_user = "root"
db_password = "sua_senha_segura"
db_name = "meu_banco"
diretorio_destino = "./backups"
# Garante que a pasta de destino exista
os.makedirs(diretorio_destino, exist_ok=True)
# Gera nome de arquivo único com timestamp (ex: backup_meu_banco_20261023_085600.sql)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
caminho_arquivo = os.path.join(diretorio_destino, f"backup_{db_name}_{timestamp}.sql")
# Comando CLI do mysqldump (para PostgreSQL, substitua por pg_dump)
# Nota: No PostgreSQL, defina PGPASSWORD no ambiente para evitar expor a senha no comando
comando = [
"mysqldump",
f"-u{db_user}",
f"-p{db_password}",
db_name
]
try:
# Executa o comando redirecionando a saída padrão (stdout) para o arquivo .sql
with open(caminho_arquivo, "w", encoding="utf-8") as arquivo_sql:
resultado = subprocess.run(
comando,
stdout=arquivo_sql,
stderr=subprocess.PIPE,
text=True,
check=True
)
print(f"Backup realizado com sucesso! Salvo em: {caminho_arquivo}")
except subprocess.CalledProcessError as err:
print(f"Erro ao gerar backup: {err.stderr}")
except FileNotFoundError:
print("Erro: O utilitário mysqldump não foi encontrado no PATH do sistema.")
# Exemplo de execução prática
if __name__ == "__main__":
exportar_backup_sql()
- Módulo Nativo
subprocess: Permite executar comandos do sistema operacional diretamente a partir do código Python sem a necessidade de bibliotecas externas de terceiros. - Passagem do Comando em Lista: Utilizar uma lista de strings (
["mysqldump", "-u...", ...]) em vez de uma string única concatenada melhora o manuseio de argumentos pelo sistema e previne injeções de comandos no Shell. - Segurança da Senha: Para ambientes de produção com PostgreSQL ou MySQL, é recomendado injetar as credenciais via variáveis de ambiente (como
PGPASSWORDou um arquivo~/.my.cnf) em vez de passá-las abertamente no argumento do comando. - Opção
check=True: Garante que o Python levante uma exceção (CalledProcessError) caso o utilitário do banco retorne um código de erro (ex: senha incorreta ou banco inexistente), evitando a criação de arquivos.sqlvazios sem notificação.

Comentários
Postar um comentário