Criando backup do MySQL com C#

Política de backup deve fazer parte da segurança de qualquer sistema de informação. Nesta aula de hoje vamos aprender como utilizar a classe MySqlBackup para exportar facilmente toda a base de dados do sistema.

Preparando o projeto para fazer backups do banco MySQL

Se você já possui um sistema de informação, é importante que a programação do backup não seja feita dentro do próprio sistema que você desenvolveu. É interessante que se crie um utilitário separado ao sistema principal.

Mas por que? Ao criar o utilitário separado, você poderá acrescentá-lo no agendador de tarefas do Windows, entendeu?

Este é um projeto exemplo que terá uma única função, executar backups.

  1. Inicie um novo projeto Console Application .Net Framework (Aplicativo do Console Framewrok .Net).
  2. Dê o nome para o projeto de ConsoleBackup para que possa acompanhar estes exemplos.

Calma, não se preocupe, é isso mesmo! Não teremos interface gráfica neste projeto. Ele deverá ser autônomo, ou seja, não precisará de interação humana para funcionar.

Entenda que ao adicionar este utilitário no agendador de tarefas ele simplesmente deverá ser executado e simplesmente deverá fazer o backup, nada mais e não deve em hipótese alguma depender de uma interação humana para isso.

Além do agendador de tarefas, você poderá executar este utilitário quando bem entender, como por exemplo, executar o utilitário sempre que o sistema for iniciado, ou, finalizado.

A extensão MySqlBackup.NET

A extensão MySqlBackup é uma pequena biblioteca para .Net que facilita a implementação de backups.

  1. Faça o download na página oficial do MySqlBackup.NET;
  2. Descompacte o arquivo baixado.
  3. Você verá duas pastas, Net40 e Net45 sendo que a primeira deve ser utilizada em aplicações desenvolvidas com a versão 4.0 do .NET e a segunda com a versão 4.5. Muito provavelmente você estará utilizando a versão 4.5.
  4. Entre dentro da pasta Net45 e copie os dois arquivos DLL existentes dentro da pasta. MySql.Data.DLL e MySqlBackup.DLL
  5. Cole estes dois arquivos dentro da pasta BIN\DEBUG do seu projeto.
  6. Clique em Projeto > Adicionar Referência (Project > Add Reference)
  7. Clique em Extensões (Extensions) e adicione os dois arquivos DLL colados dentro da pasta BIN\DEBUG
  8. Adicione no código fonte da classe Program.cs duas cláusulas using, sendo elas; MySQL.Data e MySql.Data.MySqlClient;

Seu projeto já está preparado para fazer backups.

Salvando o backups, criando um arquivo de configuração do Backup.

Agora vamos fazer um truque de mestre, vamos criar um arquivo de configuração aonde teremos os dados da conexão e o caminho da pasta na qual será salva os arquivos de backups.

  1. Abra um editor de texto.
  2. Edite o arquivo seguindo a seguinte estrutura; na primeira linha coloque o endereço IP do servidor MySQL, na segunda, o nome de usuário, na terceira a senha, na quarta o nome do banco e na última linha o endereço absoluto aonde serão salvos os arquivos. Veja um exemplo;
  3. Salve o arquivo, mas não salve com a extensão .TXT, utilize qualquer outra extensão, por exemplo; backup.dat. Salve o arquivo dentro da pasta DEBUG junto com os demais arquivos.

OBS 1: Note que a configuração deste arquivo está apontando um disco externo. É importante, manter o backup em um local diferente da onde está sendo executando o MySQL. É recomendado que utilize um caminho de rede, ou, faça o backup em conjunto com algum serviço de armazenamento em nuvem como o OneDrive, Google Drive, DropBox, etc…

OBS 2: Embora o arquivo esteja salvo com a extensão .dat, o que inibe a ação de alguns curiosos, é sensato entender que ainda não há segurança suficiente para proteger os dados de conexão do banco. Neste caso é possível criptografar o arquivo usando uma chave AES, no entanto, este assunto ficará para uma próxima aula.

Programando o backup.

Agora vamos programar a classe Program.cs, dentro do método Main, adicione o seguinte código;

String servidor = "";
String usuario = "";
String senha = "";
String banco = "";
String local = "";

//faz a leitura do arquivo config.dat e captura o valor de cada linha.
 int contador = 0;
 string linha;
 System.IO.StreamReader file = new System.IO.StreamReader(@"config.dat");
 while ((linha = file.ReadLine()) != null)
 {
   if (contador == 0) servidor = linha;
   if (contador == 1) usuario = linha;
   if (contador == 2) senha = linha;
   if (contador == 3) banco = linha;
   if (contador == 4) local = linha;
   contador++;
 }
 file.Close();
// fim da leitura do arquivo.

string constring = "server=" + servidor +";user=" + usuario + ";pwd=" + senha +";database=" + banco +";";
 Console.Write(constring);

constring += "charset=utf8;convertzerodatetime=true;";

// define o nome do arquivo de backup de acordo com a data e hora.
 string dia = DateTime.Now.Day.ToString();
 string mes = DateTime.Now.Month.ToString();
 string ano = DateTime.Now.Year.ToString();
 string hora = DateTime.Now.ToLongTimeString().Replace(":", "");
 string nomeDoArquivo = ano + mes + dia + "_" + hora;
// fim

// gera o conteúdo do arquivo de backup e salva no local definido no config.dat
 string arquivo = local + "\\" + nomeDoArquivo + ".sql";
 using (MySqlConnection conn = new MySqlConnection(constring))
 {
   conn.Close();
   using (MySqlCommand cmd = new MySqlCommand())
   {
     using (MySqlBackup mb = new MySqlBackup(cmd))
     {
       cmd.Connection = conn;
       conn.Open();
       mb.ExportToFile(arquivo);
       conn.Close();
     }
   }
 } 
// fim

Prontinho! Basta executar a aplicação e você terá o seguinte resultado:

Legal né?

Agendando o backup.

  1. Acesse o Painel de Controle do Windows.
  2. Localize o recurso Agendar Tarefas.
  3. No console do agendador, localize no menu ao lado direito o item Criar Tarefa Básica 
  4. Será carregado um assistente, dê um nome para a tarefa e uma descrição para ela.
  5. Na etapa seguinte, selecione Diariamente e avance.
  6. Na etapa seguinte, mantenha ao configuração para Repetir a cada 1 dia e avance.
  7. Na etapa seguinte, selecione “Iniciar um programa” e avance.
  8. Na etapa seguinte, defina o local aonde está salvo o utilitário ConsoleBackup.exe e avance.
  9. Na etapa fina basta clicar em Concluir.

Executando o utilitário de backup dentro do sistema principal.

Conforme proposto por este artigo, o utilitário deve ser executado separadamente do programa principal.

Então, caso queira deixar uma opção de backup dentro do sistema principal basta executar o utilitário através da chamada de processos do Windows.

Para saber como executar um programa dentro de outro, veja o exemplo nesta aula – Chamando processos do Windows em C#

É isso, até a próxima, fiquei devendo a criptografia para deixarmos esta rotina de backup ainda mais segura.