Git Product home page Git Product logo

mysql-backup's Introduction

MySQL-Backup

É fato que devemos ter backups íntegros das nossas aplicações e servidores. Um backup confiável pode ser a diferença entre você ter que trabalhar durante algumas horas ou alguns dias ou até mesmo a diferença entre o sucesso ou a falência de uma empresa. Nada é mais frustrante, desmotivante e caro do que ter que refazer todo um sistema por uma simples falha no seu backup.

Artigo previamente publicado no meu blog: www.mysqlbox.com.br

Configurando o ambiente

Para que o nosso script consiga usar a API, precisamos instalar o curl. O curl é uma ferramenta de linha de comando open source que transfere dados para uma URL, suportando DICT, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMTP, SMTPS, Telnet e TFTP. Suporta certificados SSL, HTTP POST, HTTP PUT, upload FTP, proxies, HTTP/2, cookies, autenticação de usuário e senha (Basic, Plain, Digest, CRAM- MD5, NTLM, Negotiate e Kerberos) , tunneling proxy e muito mais.

Para instalá-lo, basta executar o comando:

apt-get install curl

Você precisará do git para efetuar o download dos scripts. Para quem não conhece, o git é um sistema de controle de versão, gratuito e open source. Para você trabalhar com o GitHub ou BitBucket, você precisa ter o git instalado em sua máquina. Então vamos instalá-lo:

apt-get install git

Com o curl e git instalados, precisamos configurar o nosso usuário de MySQL que fará os dumps dos nossos bancos via mysqldump. O mysqldump é um utilitário do MySQL que executa backups lógicos, produzindo um conjunto de instruções SQL que podem ser executadas para reproduzir as definições de objeto de banco de dados originais e os dados da tabela. Ele despeja um ou mais bancos de dados MySQL para backup. O comando mysqldump também pode gerar a saída em formato CSV, ou em formato XML.

A configuração do MySQL é rápida e o usuário terá apenas permissão de leitura. Lembrando que por motivos óbvios de segurança, devemos liberar o acesso apenas para localhost ou para o IP do servidor que se conectará e fará os backups.

mysql> GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, RELOAD, SUPER, FILE ON *.* TO backup@localhost IDENTIFIED BY 'SUASENHA';

Com o shell e o MySQL prontos para fazer o backup, vamos ao próximo passo, que é o Dropbox!

Dropbox

Eu tenho certeza que você usa, usou ou já ouviu falar do Dropbox. Além de ser uma excelente ferramenta de armazenamento, nós podemos compartilhar dados com outras pessoas. É possível trabalhar via Shell Script, Node.js, Python etc, sem falar no preço que é muito bom. A forma com que vamos trabalhar com o Dropbox aqui será um pouco diferente da que você está acostumado.

Acesse a área de developers do Dropbox e clique em "My apps". Será solicitado o seu login, basta autenticar ou criar uma nova conta. Agora logado em seu painel, você deve ir em "Create app".

A minha configuração ficou com o Dropbox API que é a versão free, na segunda opção liberei o acesso apenas ao diretório que será criado para o nosso app (App Folder) e a terceira opção eu coloquei um nome para o meu app. Anote a sua App Key e App Secret.

Agora vamos ao script.

Os scripts

A API do Dropbox não é difícil de ser usada, a documentação é muito boa. É através da API que trabalharemos com o Dropbox para armazenar os nossos backups. Para nos comunicarmos com a API do Dropbox, iremos utilizar um shell criado pelo Andrea Fabrizi e que pode ser clonado do git do MySQL Box. Para baixar e instalar, siga os passos:

cd /usr/local/bin
git clone https://github.com/andreafabrizi/Dropbox-Uploader.git
cd Dropbox-Uploader
chmod +x dropbox_uploader.sh
./dropbox_uploader.sh

Executando o shell script, serão solicitadas algumas informações, preencha-as, acesse a URL com o token e aperte enter.

./dropbox_uploader.sh
This is the first time you run this script, please follow the instructions:

 1) Open the following URL in your Browser, and log in using your account: https://www.dropbox.com/developers/apps
 2) Click on "Create App", then select "Dropbox API app"
 3) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder
 4) Enter the "App Name" that you prefer (e.g. MyUploader13884818027723)

 Now, click on the "Create App" button.

 When your new App is successfully created, please click on the Generate button
 under the 'Generated access token' section, then copy and paste the new access token here:

 # Access token: MYRANDOMACCESSTOKEN

 > The access token is MYRANDOMACCESSTOKEN. Looks ok? [y/N]: y
   The configuration has been saved.

Setup completed! 

Com o Dropbox-Uploader configurado, vamos criar o script que fará o dump dos seus bancos de dados. Este script também está no repositório do GituHub. 

cd /usr/local/bin
sudo git clone https://github.com/almirb/MySQL-Backup.git
sudo chmod 700 MySQL-Backup/Backup_MySQL.sh 
sudo chmod 777 MySQL-Backup/tmp/
sudo nano /var/log/mysql-backup.log    (salvar arquivo vazio)
sudo chmod 777 /var/log/mysql-backup.log

Para fazer o teste, rode o comando (SEM sudo):

cd /usr/local/bin
./Backup_MySQL.sh

Dentro do arquivo Shell, você deve colocar o usuário e senha do seu usuário de backup. Lembrando que este usuário não pode ter privilégios de administrador ou de escrita, apenas leitura.

USER="" #Usuario do backup
SECRET="" #Senha do usuario

Agendamento e log

Após a configuração do script, basta adicionar uma rotina no cron. Para quem não conhece, o cron é um sistema de agendamento de tarefas do Linux. É nele que você configurará as rotinas do backup ou execução de algum script shell, perl, python, php etc. Sua utilização e sintaxe são bem simples, fáceis de decorar e usar.

MUITO IMPORTANTE: NÃO RODAR O CRONTAB COM SUDO

crontab -e

Sintaxe do cron:

* * * * * /usr/local/bin/MySQL-Backup/Backup_MySQL.sh
| | | | | |
| | | | | +----- Comando a ser executado
| | | | +------- Dia da semana (0 - 7) (0 ou 8 é domingo)
| | | +--------- Mês (1 - 12)
| | +----------- Dia do mês (1 - 31)
| +------------- Hora (0 - 23)
+--------------- Minuto (0 - 59)

Com o comando crontab -e você abrirá o terminal de edição, basta apertar "insert" ou "i", inserir a rotina desejada, salvar o arquivo apertando "ESC" ":wq!" (igual ao vi ou vim) e reiniciar o serviço com o systemctl restart crond.

00 01 * * * /usr/local/bin/MySQL-Backup/Backup_MySQL.sh

Fique atento aos logs do MySQL-Backup que estão armazenados em /var/log/mysql-backup.log.

Caso queira ter um controle destes logs, para que não ocupem espaço em disco sem necessidade, você pode utilizar o logrotate. O logrotate é uma ferramenta que faz o rotacionamento de logs no Linux. Com ele você consegue limitar o tamanho dos logs, manter logs por dias específicos, compactar e outras diversas opções. Para efetuar esta configuração, edite o arquivo /etc/logrotate.conf e adicione no final do arquivo:

    /var/log/mysql-backup.log {
            daily                   #Cria um log por dia
            create 0600 root root   #Permissão do arquivo de log
            rotate 4                #Quantos logs antigos serão mantidos
    }

Tutorial disponível em: http://www.mysqlbox.com.br/backup-mysql-api-dropbox/

mysql-backup's People

Contributors

almirb avatar mysqlbox avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.