Backup de MySQL
Este guia mostra como configurar backup automatizado de bancos MySQL.
Pré-requisitos
- BackupAlly instalado
- Acesso ao servidor MySQL
- Usuário com permissões de backup
Criar Usuário de Backup
Crie um usuário dedicado para backups:
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'senha-segura';
GRANT SELECT, SHOW DATABASES, LOCK TABLES, RELOAD ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;Armazenar Credenciais
backupally secrets set mysql_user "backup"
backupally secrets set mysql_password "senha-segura"Criar Task de Backup
Backup de Todos os Bancos
Crie /etc/backupally/tasks.d/mysql-prod.toml:
[task]
id = "mysql-prod"
name = "MySQL Production - All Databases"
enabled = true
schedule = "0 2 * * *"
[target]
kind = "database"
driver = "mysql"
host = "localhost"
port = 3306
database = "*"
user = "${secret:mysql_user}"
password = "${secret:mysql_password}"
excludes = ["mysql", "performance_schema", "information_schema", "sys"]
single_transaction = true
[packer]
compressor = "zstd"
compression_level = 6
[[storage]]
id = "local"
driver = "local"
path = "/backup/mysql"
retention = "daily 7, weekly 4"
[[storage]]
id = "s3"
driver = "s3"
bucket = "my-backups"
region = "us-east-1"
path = "mysql/${hostname}/${date}"
access_key = "${secret:aws_access_key}"
secret_key = "${secret:aws_secret_key}"
retention = "daily 14, weekly 8, monthly 6"Backup de Banco Específico
[task]
id = "mysql-app"
name = "MySQL - Application Database"
enabled = true
schedule = "0 */6 * * *"
[target]
kind = "database"
driver = "mysql"
host = "localhost"
database = "myapp"
user = "${secret:mysql_user}"
password = "${secret:mysql_password}"
single_transaction = true
[[storage]]
driver = "local"
path = "/backup/mysql/myapp"
retention = "daily 7"Validar Configuração
backupally task validate mysql-prodExecutar Backup Manual
backupally backup --target mysql-prodAgendar Backup
Habilite o scheduler:
sudo systemctl enable backupally-scheduler
sudo systemctl start backupally-schedulerVerificar Execuções
backupally history --target mysql-prodRestaurar Backup
Listar Snapshots
backupally history --target mysql-prodRestaurar
backupally restore \
--target mysql-prod \
--snapshot snap_20260211_020000 \
--path /restore/mysqlImportar no MySQL
mysql -u root -p < /restore/mysql/myapp.sqlOu para banco específico:
mysql -u root -p myapp < /restore/mysql/myapp.sqlOpções Avançadas
Transação Consistente
Para garantir consistência em InnoDB:
[target]
single_transaction = true
lock_tables = falseLock de Tabelas
Para MyISAM ou tabelas mistas:
[target]
single_transaction = false
lock_tables = trueCharset Específico
[target]
charset = "utf8mb4"Monitoramento
Webhook no Slack
[notification]
enabled = true
[notification.webhook]
url = "https://hooks.slack.com/services/xxx/yyy/zzz"
method = "POST"Notificar Apenas em Erro
[notification]
enabled = true
only_on_error = trueTroubleshooting
Erro de Conexão
Verifique:
mysql -h localhost -u backup -p -e "SHOW DATABASES"Permissão Negada
Conceda permissões adicionais:
GRANT SELECT, SHOW DATABASES, LOCK TABLES ON *.* TO 'backup'@'localhost';Timeout
Aumente o timeout:
[network]
timeout_seconds = 600
By Borlot.com.br on 11/02/2026