você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

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