O Rclone é uma poderosa ferramenta de cópia de arquivos que pode servir como backup para enviar arquivos a diferentes provedores, como BackBlaze entre muitos outros.
Aqui descrevo uma forma de enviar um banco de dados MySQL ou MariaDB para o destino configurado do Rclone, considerando que ele já está configurado para enviar os arquivos, no caso, para o BackBlaze. A configuração inicial do Rclone é intuitiva, executando "rclone config", os passos a seguir são após a conclusão dessa configuração.
Primeiro, crie um arquivo com a senha do banco de dados que vc irá se conectar e coloque na sua pasta /home, como no meu caso em "/home/bitnami/.dbpassword.cnf", executando dentro da sua pasta do home:
nano .dbpassword.cnf
No arquivo, alimente o conteúdo com a senha do seu banco de dados e salve:
[mysqldump]
password="suasenhaaqui"
Defina o arquivo para que somente seu usuário tenha acesso:
chmod 600 ~/.dbpassword.cnf
Crie o arquivo de script que será executado pelo crontab periodicamente, no caso, também estou salvando dentro do home do usuário:
nano rclone.sh
Escreva o script, prestando atenção nas variáveis a seguir:
- FILENAMEDATE, que se refere ao formato que os arquivos terão, normalmente não precisa de alteração;
- DATABASE, que se refere ao nome do banco de dados MySQL ou MariaDB;
- USER, que se refere ao usuário do banco de dados;
- RCLONEREMOTE, que se refere ao nome do REMOTE configurado no Rclone;
- BUCKET, que se refere ao bucket do BackBlaze (note que em caso de outro serviço de backup, talvez seja necessário corrigir a sintaxe dos comandos "rclone");
- WEBDIR, que se refere a pasta anterior à pasta que você quer fazer backup;
- WEBFOLDER, que se refere à pasta que será compactada e enviada ao backup pelo Rclone;
- RETENTION, que diz ao Rclone que deverá eliminar o arquivo após X dias.
Note também que estou chamando no script o programa "mariadb-dump", pois executo o MariaDB e o "mysqldump" será descontinuado, eu chamava o "mysqldump" sem o path completo mas recebi mensagens do sistema informando que em breve o comando seria descontinuado no MariaDB.
#!/bin/bash
FILENAMEDATE=$(date +%Y-%m-%dT%H-%M-%S)
DATABASE=nomedoseubancodedados
USER=root
RCLONEREMOTE=nomedoseuremote
BUCKET=nomedoseubucket
WEBDIR=/opt/bitnami/apache
WEBFOLDER=htdocs
RETENTION=7d
mkdir -p ./backup
/opt/bitnami/mariadb/bin/mariadb-dump --defaults-extra-file=./.dbpassword.cnf -u $USER --single-transaction --skip-lock-tables --quick $DATABASE > ./backup/$FILENAMEDATE.sql
tar -czf ./backup/$FILENAMEDATE-DB.tar.gz --remove-files ./backup/$FILENAMEDATE.sql
tar -czf ./backup/$FILENAMEDATE-WEB.tar.gz -C $WEBDIR $WEBFOLDER
rclone move ./backup/$FILENAMEDATE-DB.tar.gz $RCLONEREMOTE:$BUCKET/
rclone move ./backup/$FILENAMEDATE-WEB.tar.gz $RCLONEREMOTE:$BUCKET/
rclone delete --min-age $RETENTION $RCLONEREMOTE:$BUCKET/
Outro modelo de rclone.sh:
#!/bin/bash FILENAMEDATE=$(date +%Y-%m-%dT%H-%M-%S) DATABASE=senha USER=root BUCKET=senha-ivancarlos-com-br RETENTION=7d mkdir -p ./backup mariadb-dump --defaults-extra-file=./.dbpassword.cnf -u $USER -h 127.0.0.1 --single-transaction --skip-lock-tables --quick $DATABASE ./backup/$FILENAMEDATE.sql tar -czf ./backup/$FILENAMEDATE-DB.tar.gz --remove-files ./backup/$FILENAMEDATE.sql rclone move ./backup/$FILENAMEDATE-DB.tar.gz remote-senha:$BUCKET/ rclone delete --min-age $RETENTION remote-senha:$BUCKET/ --b2-hard-delete
Habilite a execução do arquivo como script:
chmod +x rclone.sh
Acesse o crontab:
crontab -e
Adicione a linha que programará a tarefa, no caso, todo dia, às 02:00. Você pode construir novas entradas em crontab.guru caso tenha dificuldade. Note que eu navego para a pasta do script que é meu home primeiro, para depois executar o script:
0 2 * * * cd /home/bitnami; ./rclone.sh >/dev/null 2>&1
Sabe o arquivo e seu script Rclone estará pronto para trabalhar. Você pode testá-lo executando:
./rclone.sh
Ele não deve retornar nenhum erro.