sábado, 3 de agosto de 2013

MYSQL: BACKUPS REMOTOS

PRIMERA VERSION DEL SCRIPT
 
Este script nos permite hacer dumps a las bases de un servidor Mysql.
La ventaja que posee este script es que cuando se sube una base nueva al servidor, no debemos preocuparnos por el dumps, ya que el script a travez de utilizar vectores tiene la capacidad de detectar los cambios automaticamente.
Aca les dejo una somera descripcion de su funcionamiento:
  
1.- Variables para conectar al servidor de Mysql

host="xxx.xxx.xxx.xxx"
user=user
pass=pasword

2.- Genero un vector para los argumentos de Mysql

Vector Argumento (args) de comandos MysqlVectores
Vector lineal                              ( base1 base2 base3)
Posicion Elementos del vector         0      1     2 

Opcion 1:

args=("-h $host -u $user -p$pass" "-h $host -u $user -p$pass --opt ")

Opcion 2:

  
args=("-h $host -u $user -p$pass" "-h $host -u $user -p$pass --single-transaction ")

3.- Variable para determinar la Fecha y Hora que luego la utilizo para el nombre del dump

datetime=$(date +%Y%m%d)


4.- Variable donde determino el nombre del archivo por el cual despues genero el vector

filename=arrays


5- Declaro al vector

declare -a array1


6.- Genero el archivo declarado arriba

mysqlshow ${args[0]} > $filename


7.- Archivo array como lo genera mysqlshow

+-------------------------------+
|     Databases                 |
+-------------------------------+
| information_schema     |
| base1                             |
| base2                             |
| base3                             |
| .......                                 |
+-------------------------------+

8.- Variables para el limite inferior y superior del vector

8.1.- Limite inferior del Vector array1

a=0


8.2.- Limite Superior del Vector array1

Cuento las palabras, los sed y el tr los utilizo para sacar los caracteres "+", "|" , el titulo "Database" y la Base "information_schema". La variable counts tiene sentido para utilizar un vector lineal dinamico, gracias al archivo que genero con la consulta que hago con mysqlshow.

counts=(` cat "$filename" | sed -e '/+/d' | tr -d '|' | sed -e '/Database/d'| sed -e '/information_schema/d' | wc -w `)

9.- Leo el archivo y le deleteo todo aquello que no me sirve

array1=( `cat "$filename" | sed -e '/+/d' | tr -d '|'  | sed -e '/Database/d' | sed -e '/information_schema/d'` )

10.- Genero un vector dinamico

while [ $a -lt $counts ]
    do
        echo ${array1[$a]}-$datetime.sql # Permite ver en tiempo real lo que esta haciendo dump
        mysqldump ${args[1]} ${array1[$a]}  > ${array1[$a]}-$datetime.sql
        let a+=1 # Contador que utilizo para recorre el vector   
    done

echo

exit 0

El script con la "Opcion 1" de la variable "args" quedaria asi:
#!/bin/bash

declare -a array1
host="xxx.xxx.xxx.xxx"
user=user
pass=password
datetime=$(date +%Y%m%d)
filename=/var/local/arrays
pathbkp=/var/local/dumps
a=0

args=("-h $host -u $user -p$pass" "-h $host -u $user -p$pass --opt ")

mysqlshow ${args[0]} > $filename

counts=( `cat "$filename" | sed -e '/+/d' | tr -d '|' | sed -e '/Database/d'| sed -e '/information_schema/d' | wc -w `)
array1=( `cat "$filename" | sed -e '/+/d' | tr -d '|'  | sed -e '/Database/d' | sed -e '/information_schema/d'` )

while [ $a -lt $counts ]
    do
        echo ${array1[$a]}-$datetime.sql
        mysqldump ${args[1]} ${array1[$a]} > $pathbkp/${array1[$a]}-$datetime.sql
        let a+=1
    done

echo

exit 0

No hay comentarios:

Publicar un comentario