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