Mysql / Dropbox CLI Backups com PHP Symfony Console Component — Introdução

Olá, tudo bem?

Hoje vamos falar um pouco de Command-Line Interface e como criar nosso próprio programa CLI. Me chamo Mauricio Rodrigues e estou começando com uma série de artigos funcionais, daqueles que falam de necessidades que nós já tivemos, temos ou logo teremos, em nossa árdua jornada.

Em uma curta definição, um programa CLI é onde o usuário (ou cliente) interage com o programa, via linhas de textos ou linhas de comando e é bastante util quando se quer controlar um sistema operacional ou um programa de forma mais rápida e concisa.

Imagine que você quer desligar o seu computador, certo? Como seu sistema operacional possui uma GUI, você provavelmente irá clicar em Iniciar > Desligar > Ok, caso você esteja utilizando Windows 8, por exemplo. Mas se você estiver utilizando uma distribuição do Ubuntu, e não possuir uma GUI, você pode executar essa mesma tarefa digitando o seguinte comando no terminal:

$sudo shutdown /now

Agora imagine que você é um Mac User e quer saber o ip do seu computador na rede. Você pode abrir o System Preferences e acessar a Network Preferences ou pode simplesmente digitar no terminal:

$ /sbin/ifconfig | less |grep broadcast

A grande vantagem dos Programas CLI é a concisão. É executar determinados programas digitando o seu nome, passando alguns argumentos e parametrizando algumas opções. É compilar uma série de tarefas e rotinas em curtos comandos.

Conheça algumas vantagens e desvantagens desse tipo de programa:

Vantagens

  • Requer menos recursos;
  • Conciso e poderoso;
  • Amigável para usuários avançados; e
  • Fácil de automatizar via script.

Desvantagens

  • Não é intuitivo;
  • Não possui comandos óbvios;
  • Não tem uma interface poderosa e amigável; e
  • Não é amigável para usuários iniciantes.

O que iremos desenvolver?

Hoje iremos tratar um caso útil e, talvez, necessário para algumas pessoas / empresas. Imagine que você possui um banco de dados de uma aplicação e que você precisa fazer o backup do seu SQL para o Dropbox. Essa é uma tarefa basicamente simples, mas requer a execução alguns passos, como:

  1. Gerar o dump do SQL (via terminal ou SGBD);
  2. Salvar o dump em um local de fácil acesso;
  3. Abrir a pasta do dropbox;
  4. Copiar um dump da pasta local, para a pasta do Dropbox;
  5. Fechar pasta do Dropbox e voltar a trabalhar =)

Não é difícil executar os itens acima. Mas já no primeiro item, podemos perceber que não é qualquer pessoa que pode executar essa tarefa. Um estagiário, por exemplo, pode não possuir conhecimento o bastante pra gerar o dump do SQL ou pode até saber exportar o banco, com as estruturas e os dados, mas pode não saber exportar as routines, functions e procedures.

Agora, se criássemos um programa CLI, o estagiário poderia executar magicamente todos os passos listados acima, com um simples comando:

$ backup make 

Poderia também listar todos os backups já efetuados, com o comando:

$ backup all

E poderia contar para todos os seus amigos e parentes, que já assumiu responsabilidades na empresa e está responsável pela execução das rotinas de backup do banco de dados. [:clap][:clap]

Então é isso o que iremos fazer, nós vamos criar um programa de linha de comando, que irá executar o dump de uma base de dados Mysql e enviará para o Dropbox. Nesse programa nós teremos os seguintes comandos:

  • dropbox:init — Configura o Dropbox (App e Secret Key);
  • dropbox:generate-token — Gera e persistir o AccessToken do Dropbox;
  • show — Lista todos os backups;
  • make — Executa rotina de backup, gerando dump e enviando para o dropbox;
  • delete — Deleta um backup.

No final desse estudo, seu programa ficará assim:

Pré-requisitos

Para desenvolver esse projeto, é necessário possuir conhecimentos em Mysql e PHP, além de possuir instalado na máquina:

  • PHP 5.3+ e as extensões do php (Cli, Oauth, MCrypt, cUrl e MBString);
  • Mysql;
  • Composer; e
  • Acesso à internet, obviamente!

No próximo artigo, eu vou mostrar como preparar o ambiente para que possamos iniciar com o desenvolvimento do nosso primeiro programa.

Até lá!