Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.40 KB | None | 0 0
  1. Script de backup MySQL e MariaDB
  2. Introdução
  3. Uma das tarefas mais importantes para um administrador de banco de dados é o backup de sua(s) database(s).
  4.  
  5. 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.
  6.  
  7. Neste post, é adotado o CentOS 5 como referência. Mas versões mais novas também deverão funcionar sem problemas.
  8.  
  9. Criação e configuração do Usuário ‘backup’
  10. Para criarmos o usuário, precisamos de privilégios administrativos no MySQL. Neste exemplo utilizaremos o usuário root.
  11.  
  12. Estando logado na máquina do banco, efetue logon no MySQL shell:
  13.  
  14. $mysql -u root -p
  15. Forneça a senha de acesso e o prompt do shell MySQL será apresentado:
  16.  
  17. Welcome to the MySQL monitor. Commands end with ; or \g.
  18. Your MySQL connection id is 996333
  19. Server version: 5.0.77-log Source distribution
  20.  
  21. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  22.  
  23. mysql>
  24.  
  25. REPORT THIS AD
  26.  
  27. REPORT THIS AD
  28.  
  29. Depois de logado, devemos criar o usuário e definir a senha:
  30.  
  31. mysql>create user backup@localhost identified by 'seu_password';
  32. 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.
  33.  
  34. Agora devemos dar os privilégios para este usuário efetuar as rotinas de backup:
  35.  
  36. mysql>GRANT SELECT, RELOAD, SHOW DATABASES, LOCK TABLES ON *.* TO 'backup'@'localhost';
  37. O usuário ‘backup’ deve possuir os privilégios SELECT, RELOAD, SHOW DATABASES e LOCK TABLES para conseguir efetuar os backups corretamente.
  38.  
  39. Alguns testes podem ser feitos para verificar se o usuário backup está ok.
  40.  
  41. Tente logar no MySQL Shell
  42.  
  43. $mysql -u root -p
  44.  
  45. REPORT THIS AD
  46.  
  47. REPORT THIS AD
  48.  
  49. Depois verifique as databases disponíveis
  50.  
  51. mysql> show databases;
  52. Suponto que exista uma database chamada teste, com uma tabela tabela1, efetue um select nesta database:
  53.  
  54. mysql> use backup; select * from tabela1;
  55. Se tudo correu bem até agora, podemos ir para o próximo passo. Caso contrário, volte e verifique os passos executados.
  56.  
  57. Criação do script de backup
  58. Como o script já está todo comentado, não serão feitos comentários extras a respeito do mesmo.
  59.  
  60. O script será salvo no diretório /opt/scripts com o nome de backup_mysql.sh
  61. #!/bin/bash
  62. ###################################################################
  63. # Nome : backup_mysql.sh
  64. # Script para Backup dos dados do MySQL #
  65. # Criação : 31/03/2017 - Adail Antonio #
  66. # Ultima modificação : 31/03/2017 - Adail Antonio #
  67. ###################################################################
  68.  
  69. # Changelog
  70.  
  71.  
  72. ##### Variaveis
  73. declare DATA=`date +%Y%m%d_%H%M%S`
  74. declare DIR_BACKUP="/opt/backups/mysql/" # Define o diretório de backup
  75. declare SENHA="seu_password"
  76. declare USER="backup"
  77. DIR_DEST_BACKUP=$DIR_BACKUP$DATA
  78. ###################################################################
  79.  
  80. ##### Rotinas secundarias
  81. mkdir -p $DIR_BACKUP/$DATA # Cria o diretório de backup diário
  82. echo "MYSQL"
  83. echo "Iniciando backup do banco de dados"
  84. ##################################################################
  85.  
  86. # função que executa o backup
  87. executa_backup(){
  88. echo "Inicio do backup $DATA"
  89. #Recebe os nomes dos bancos de dados na maquina destino
  90. BANCOS=$(mysql -u $USER -p$SENHA -e "show databases")
  91. #retira palavra database
  92. #BANCOS=${BANCOS:9:${#BANCOS}}
  93.  
  94. declare CONT=0
  95.  
  96. #inicia o laço de execução dos backups
  97.  
  98.  
  99. for banco in $BANCOS
  100. do
  101. if [ $CONT -ne 0 ]; then # ignora o primeiro item do array, cujo conteudo é "databases"
  102. NOME="backup_my_"$banco"_"$DATA".sql"
  103.  
  104.  
  105. echo "Iniciando backup do banco de dados [$banco]"
  106. # comando que realmente executa o dump do banco de dados
  107. mysqldump --hex-blob --lock-all-tables -u $USER -p$SENHA --databases $banco > $DIR_DEST_BACKUP/$NOME
  108.  
  109.  
  110. # verifica que se o comando foi bem sucedido ou nao.
  111. if [ $? -eq 0 ]; then
  112. echo "Backup Banco de dados [$banco] completo"
  113. else
  114. echo "ERRO ao realizar o Backup do Banco de dados [$banco]"
  115. fi
  116.  
  117. fi
  118. CONT=`expr $CONT + 1`
  119. done
  120.  
  121.  
  122. DATA=`date +%Y%m%d_%H%M%S`
  123.  
  124. echo "Final do backup: $DATA"
  125. }
  126.  
  127. executa_backup 2>> $DIR_BACKUP/$DATA/backup.log 1>> $DIR_BACKUP/$DATA/backup.log
  128.  
  129. ###################################################################
  130.  
  131. REPORT THIS AD
  132.  
  133. REPORT THIS AD
  134.  
  135. É importante não esquecer de dar permissões de execução ao script:
  136.  
  137. $sudo chmod +x /opt/scripts/backup_mysql.sh
  138.  
  139.  
  140. Agendamento das execuções (crontab)
  141. 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.
  142.  
  143. Para editar o crontab do root, com o editor padrão do sistema:
  144.  
  145. $sudo crontab -e
  146. 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.
  147.  
  148. 00 02 * * * /opt/scripts/backup_mysql.sh
  149. 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.
  150.  
  151. 0 23 * * * /usr/bin/find /opt/backups/mysql -type d -ctime +31 -exec rm -rf '{}' \;
  152.  
  153.  
  154. Depois de salvo o arquivo de configuração do crontab, seu sistema já esta devidamente configurado para os backups mensais.
  155.  
  156. blur bright business codes
  157. Photo by Pixabay on Pexels.com
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement