Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Script de backup MySQL e MariaDB
- Introdução
- Uma das tarefas mais importantes para um administrador de banco de dados é o backup de sua(s) database(s).
- O objetivo deste post é criar um script de backup que ficará agendado no crontab e executará as rotinas de backup todos os dias as 02:00 a.m. O usuário “backup” só terá privilégios necessários para efetuar o backup.
- Neste post, é adotado o CentOS 5 como referência. Mas versões mais novas também deverão funcionar sem problemas.
- Criação e configuração do Usuário ‘backup’
- Para criarmos o usuário, precisamos de privilégios administrativos no MySQL. Neste exemplo utilizaremos o usuário root.
- Estando logado na máquina do banco, efetue logon no MySQL shell:
- $mysql -u root -p
- Forneça a senha de acesso e o prompt do shell MySQL será apresentado:
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 996333
- Server version: 5.0.77-log Source distribution
- Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
- mysql>
- REPORT THIS AD
- REPORT THIS AD
- Depois de logado, devemos criar o usuário e definir a senha:
- mysql>create user backup@localhost identified by 'seu_password';
- Neste exemplo, foi criado o usuário ‘backup’ que pode acessar o MySQL somente da própria máquina do banco, utilizando a senha ‘seu_password’. Se tentarmos acessar o MySQL com este usuário de outra máquina, que não seja a própria maquina do banco, teremos acesso negado.
- Agora devemos dar os privilégios para este usuário efetuar as rotinas de backup:
- mysql>GRANT SELECT, RELOAD, SHOW DATABASES, LOCK TABLES ON *.* TO 'backup'@'localhost';
- O usuário ‘backup’ deve possuir os privilégios SELECT, RELOAD, SHOW DATABASES e LOCK TABLES para conseguir efetuar os backups corretamente.
- Alguns testes podem ser feitos para verificar se o usuário backup está ok.
- Tente logar no MySQL Shell
- $mysql -u root -p
- REPORT THIS AD
- REPORT THIS AD
- Depois verifique as databases disponíveis
- mysql> show databases;
- Suponto que exista uma database chamada teste, com uma tabela tabela1, efetue um select nesta database:
- mysql> use backup; select * from tabela1;
- Se tudo correu bem até agora, podemos ir para o próximo passo. Caso contrário, volte e verifique os passos executados.
- Criação do script de backup
- Como o script já está todo comentado, não serão feitos comentários extras a respeito do mesmo.
- O script será salvo no diretório /opt/scripts com o nome de backup_mysql.sh
- #!/bin/bash
- ###################################################################
- # Nome : backup_mysql.sh
- # Script para Backup dos dados do MySQL #
- # Criação : 31/03/2017 - Adail Antonio #
- # Ultima modificação : 31/03/2017 - Adail Antonio #
- ###################################################################
- # Changelog
- ##### Variaveis
- declare DATA=`date +%Y%m%d_%H%M%S`
- declare DIR_BACKUP="/opt/backups/mysql/" # Define o diretório de backup
- declare SENHA="seu_password"
- declare USER="backup"
- DIR_DEST_BACKUP=$DIR_BACKUP$DATA
- ###################################################################
- ##### Rotinas secundarias
- mkdir -p $DIR_BACKUP/$DATA # Cria o diretório de backup diário
- echo "MYSQL"
- echo "Iniciando backup do banco de dados"
- ##################################################################
- # função que executa o backup
- executa_backup(){
- echo "Inicio do backup $DATA"
- #Recebe os nomes dos bancos de dados na maquina destino
- BANCOS=$(mysql -u $USER -p$SENHA -e "show databases")
- #retira palavra database
- #BANCOS=${BANCOS:9:${#BANCOS}}
- declare CONT=0
- #inicia o laço de execução dos backups
- for banco in $BANCOS
- do
- if [ $CONT -ne 0 ]; then # ignora o primeiro item do array, cujo conteudo é "databases"
- NOME="backup_my_"$banco"_"$DATA".sql"
- echo "Iniciando backup do banco de dados [$banco]"
- # comando que realmente executa o dump do banco de dados
- mysqldump --hex-blob --lock-all-tables -u $USER -p$SENHA --databases $banco > $DIR_DEST_BACKUP/$NOME
- # verifica que se o comando foi bem sucedido ou nao.
- if [ $? -eq 0 ]; then
- echo "Backup Banco de dados [$banco] completo"
- else
- echo "ERRO ao realizar o Backup do Banco de dados [$banco]"
- fi
- fi
- CONT=`expr $CONT + 1`
- done
- DATA=`date +%Y%m%d_%H%M%S`
- echo "Final do backup: $DATA"
- }
- executa_backup 2>> $DIR_BACKUP/$DATA/backup.log 1>> $DIR_BACKUP/$DATA/backup.log
- ###################################################################
- REPORT THIS AD
- REPORT THIS AD
- É importante não esquecer de dar permissões de execução ao script:
- $sudo chmod +x /opt/scripts/backup_mysql.sh
- Agendamento das execuções (crontab)
- Para que o processo de automatização seja concluído, precisamos configurar o crontab da máquina, para que ela execute o script no horário desejado.
- Para editar o crontab do root, com o editor padrão do sistema:
- $sudo crontab -e
- Serão inseridas duas linhas, a primeira linha diz para o crontab executar o script /opt/scripts/backup_mysql.sh todos os dias da semana às 02 a.m.
- 00 02 * * * /opt/scripts/backup_mysql.sh
- A segunda linha, diz respeito a retenção dos arquivos de backup na máquina. Neste caso serão mantidos os backups dos ultimos 31 dias.
- 0 23 * * * /usr/bin/find /opt/backups/mysql -type d -ctime +31 -exec rm -rf '{}' \;
- Depois de salvo o arquivo de configuração do crontab, seu sistema já esta devidamente configurado para os backups mensais.
- blur bright business codes
- Photo by Pixabay on Pexels.com
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement