Backup mysqldump usando Shell Script

Publicado por CalRaiden© 11/03/2009

[ Hits: 16.493 ]

Homepage: www.calraiden.com.br

Download backup_mysql




Esses dias fiz um script em php para realizar um mysql_dump. Porém, procurando na internet, encontrei um em shell, que em questão de perfomance mostrou-se bastante superior. Fiz algumas alterações e consertei um pequeno bug, sendo que realizava backup de todo mysql.

No meu caso só interessava backup das tabelas de um banco. Retirei a compactação atráves GZIP, mas isso está exigindo muitos recursos do server e ainda aumentava o tempo de execução do script. Por essa razão tirei, caso alguém veja o script original, saberá o que estou falando.

Acrescentei um log simples no final, apenas para saber quando começou a executar e quando terminou.

  



Esconder código-fonte

#!/bin/bash
# Shell script to backup MySql database
# To backup Nysql databases file to /backup dir and later pick up by your
# script. You can skip few databases from backup too.
# For more info please see (Installation info):
# http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/01/mysql-backup-script.html
# Last updated: Aug - 2005
# --------------------------------------------------------------------
# This is a free shell script under GNU GPL version 2.0 or above
# Copyright (C) 2004, 2005 nixCraft project
# Feedback/comment/suggestions : http://cyberciti.biz/fb/
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# ------------------------------------------------------------------

#HORA INICIO DO SCRIPT --OPCIONAL, APENAS PARA SABER QUANDO COMEÇOU A EXECUTAR E TERMINOU
START="$(date)"

#configuration
MyUSER="root"   # USERNAME
MyPASS=""       # PASSWORD
MyHOST="localhost"  # Hostname
 
# Linux bin paths, change this if it can't be autodetected via which command
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
 
# Backup Dest directory, change this if you have someother location
DEST="/root"
 
# Main directory where backup will be stored
MBD="$DEST/bkp_mysql_austin"
 
# Get data in dd-mm-yyyy format
NOW="$(date +"%d-%m-%Y")"
 
# File to store current backup file
FILE=""
# Store list of databases
TABLES=""
 
#  BACKUP these databases
DATABASE="live2go"
 
mkdir $MBD/$NOW
 
# Only root can access it!
$CHOWN 0.0 -R $MBD
$CHMOD 0600 $MBD
 
# Get all database list first
TABLES="$($MYSQL -u $MyUSER -h $MyHOST --password=$MyPASS $DATABASE -Bse 'SHOW TABLES')"
 
for tables in $TABLES
do
  FILE="$MBD/$NOW/$tables.gz"
  # do all inone job in pipe,
  # connect to mysql using mysqldump for select mysql database
  # and pipe it out to gz file in backup dir :)
    $MYSQLDUMP --add-drop-table --extended-insert --no-create-db  -u $MyUSER -h $MyHOST --password=$MyPASS $DATABASE $tables  > $FILE
done


#HORA FIM DO SCRIPT --OPCIONAL, APENAS PARA SABER QUANDO COMEÇOU A EXECUTAR E TERMINOU
END="$(date)"
#LOG SCRIPT
touch $MBD/$NOW/$NOW
echo $START >> $MBD/$NOW/$NOW
echo $END >> $MBD/$NOW/$NOW
#FIM DO LOG DO SCRIPT
exit;

Scripts recomendados

clean_squid

Instala/Remove/Atualiza com APT [gerenciador_apt.sh]

mp3towav

LAMP/Tomcat - Acesso simplificado a ferramentas do console

Wine System Font 1.0


  

Comentários
[1] Comentário enviado por calraiden em 11/03/2009 - 11:33h

Melhorando a descrição:
Esses dias fiz um script em php para realizar um mysql_dump, porém procurando na internet, encontrei um em shell, que em questão de performance, mostrou-se bastante superior. Fiz alguma alterações e consertei um pequeno bug, sendo que realizava backup de todo mysql, no meu caso só interessava backup das tabelas de um banco. Retirei a compactação atráves GZIP, pos isso estava exigindo muitos recursos do server e além que aumentava o tempo de execução do script. Por essa razão tirei, caso alguém veja o script original, saberá o que estou falando. Além que acrescentei um log simples no final, apenas para saber quando começou a executar e quando terminou.


No mysqldump foi usado os atributos "--add-drop-table --extended-insert --no-create-db", pois o banco que estou fazendo um dump, não pode ser dado o lock, o ideal que seja trocado para "--opt" , ficando a critério de cada um.

De qualquer forma, os crédito são do verdadeiro autor.

[2] Comentário enviado por edson_nasilva em 01/04/2009 - 10:25h

como que eu faço para fazer o restore do banco?

[3] Comentário enviado por calraiden em 07/05/2009 - 08:39h

pode fazer usando a seguinte linha de comando, caso tenha feito via mysqldump.

mysql -h HOST -u NOME_USUARIO -p NOME_BANCO < BACKUP.sql


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts