você está aqui: Home  → Arquivo de Mensagens

Fazendo backup de databases MYSQL em ambiente LINUX

Colaboração: Marcelo Garcia

Data de Publicação: 05 de Fevereiro de 2005

Este é um assunto sempre em pauta - "Backup". Hoje vamos abordar uma maneira de fazer backup de bases Mysql, que estão muito em moda. Este é um assunto do tipo "existem 1000 maneiras de fazer neston". Bom inventei a minha ! O que vamos precisar para executar esta dica em casa :

  • utilitario MYSQLDUMP, que é instalado junto com o Mysql - A função básica dele é o de ser um facilitador para migrações de dados entre bancos diferentes. Como ele funciona em linha de comando é perfeito para ser usado como ferramenta de backup;

  • bash - que ja temos familiaridade ;

  • botão direito do mouse - para voce copiar o script e colar no seu servidor. Vamos ter um site com os scripts para downloads, quem estiver disposto a ajudar as dicas-m oferencendo um site para hospedagem gratuita, seja bem-vindo !

    Minha ideia é simples. Montei um script em Bash, usando o Mysqldump. Coloquei ele no cron, e exporto diariamente os DADOS & ESTRUTURAS DE DADOS dos bancos que administro. Voce pode roda-lo a cada 1h por exemplo, cada um adapte a sua necessidade. O script é simples e muito funcional. Exige como parametro ao menos o nome do database. O resto voce pode configurar como default. Sitaxe básica :

      ./mybackup.sh <database>
    

    podemos ainda passar os seguintes parametros (OPCIONAIS)

      ./mybackup.sh <database> [user] [password] [host]
    

    Abaixo anatomia do script. É um ótimo exemplo de tudo o que ja vimos aqui a nível de bash. Esta bem comentado, perca um tempinho analisando o script.

      #!/bin/bash
      # Exporta dados de uma base mysql para um txt
      # By Marcelo Garcia 06/11/2004
      
      if [ $# -lt "1" ] ; then                 # Teste se tem ao menos 1  parametro - database
       echo -e "\nSyntaxe : ./mybackup.sh database [user] [password] [host] \n"
       exit 1                                 # exibo sintaxe e saio com codigo de erro
      fi
      
      # Atribuo parametros para variaveis
      database=$1
      user=$2
      passwd=$3
      host=$4
      # Verifico as variaveis (parametros) opcionais e atribuo o default caso vazio
      let ${passwd:="backup"}
      let ${user:="backup"}
      let ${host:="localhost"}
      
      backup_file="$database``date +%d-%m-%Y``.BKP"  #Agrego a data ao nome do banco para
      
      #Exceta a exportacao de dados
      mysqldump --host=$host --user=$user --password=$passwd --databases $database > $backup_file
    

    O resultado gerado é bem completo, e extremamente UTIL para um RESTORE completo da base. Ele cria o DATABASE, as TABELAS e or fim INSERE os dados do ultimo backup. Voce so vai ter que roda-lo no seu mysql em caso de pane.

    Estas base foi um teste que criei para auxiliar um colega da lista de php. Aproveitei aqui para exporta-la como exemplo. A sintaxe que eu usei foi:

      ./mybackup.sh test
    

      -- MySQL dump 10.2
      --
      -- Host: localhost    Database: test
      ---------------------------------------------------------
      -- Server version 4.1.0-alpha-standard
      
      --
      -- Current Database: test
      --
      
      CREATE DATABASE /*!32312 IF NOT EXISTS*/ test;
      
      USE test;
      
      --
      -- Table structure for table 'fornecedores'
      --
      
      DROP TABLE IF EXISTS fornecedores;
      CREATE TABLE fornecedores (
       id_fornec int(2) NOT NULL auto_increment,
       nomefornec varchar(15) default NULL,
       PRIMARY KEY  (id_fornec)
      ) TYPE=MyISAM CHARSET=latin1;
      
      --
      -- Dumping data for table 'fornecedores'
      --
      
      /*!40000 ALTER TABLE fornecedores DISABLE KEYS */;
      LOCK TABLES fornecedores WRITE;
      INSERT INTO fornecedores VALUES (1,'AMD'),(2,'Intel');
      UNLOCK TABLES;
      /*!40000 ALTER TABLE fornecedores ENABLE KEYS */;
      
      --
      -- Table structure for table 'produtos'
      --
      
      DROP TABLE IF EXISTS produtos;
      CREATE TABLE produtos (
       id_product int(2) NOT NULL auto_increment,
       id_fornec int(2) NOT NULL default '0',
       produto varchar(15) default NULL,
       PRIMARY KEY  (id_product)
      ) TYPE=MyISAM CHARSET=latin1;
      
      --
      -- Dumping data for table 'produtos'
      --
      
      /*!40000 ALTER TABLE produtos DISABLE KEYS */;
      LOCK TABLES produtos WRITE;
      INSERT INTO produtos VALUES (1,1,'Duron 1.6'),(2,1,'Duron 1.8'),(3,1,'Athlon 1.8'),(4,1,'Athlon 2000+'),(5,1,'Athlon 2400+'),(6,2,'Pentium IV 2.2'),(7,2,'Pentium IV 2.4'),(8,2,'Pentium IV 2.6'),(9,2,'Celeron');
      UNLOCK TABLES;
      /*!40000 ALTER TABLE produtos ENABLE KEYS */;./mybackup.sh test
    


Veja a relação completa dos artigos de Marcelo Garcia

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script