OVH Community, your new community space.

Script backup mysql me da problemas


tfwfactory
16/08/2014, 02:06
SI el script te está dando fallos es porque lo debes de estar guardando utilizando algún programa como dreamweaver o similar , estos programas lo que pasa es que dejan saltos de linea y espacios en el código , por eso , debes asegurarte de que no los hay para que no te den en la ejecución ningún tipo de problema , te voy a dejar una modificación del script y tal cual desde el principio al final lo copias asegurándote de que no hay ningun tipo de espacio , si lo creas como root no debes tener problema con los permisos

Una vez accedas por ssh a tu servidor lo pegas , cuando accedas fuera de la raiz de tu servidor - de root - , observarás una carpeta con el nombre mysql_backups , en la misma tendrás cada base de datos guardada en un archivo comprimido de forma independiente

El script


#! /bin/bash
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/mysql_backups/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="Tu Clave Root para MySQL o como el usuario que tenga Permisos"
MYSQLDUMP=/usr/bin/mysqldump
mkdir -p "$BACKUP_DIR/mysql"
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)" `
for db in $databases;
do
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done

Recordarte que estos parámetros son de suma importancia que los pongas de forma correcta :

BACKUP_DIR="/mysql_backups/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="Tu Clave Root para MySQL o como el usuario que tenga Permisos"
MYSQLDUMP=/usr/bin/mysqldump
En los mismos están datos tan sensibles como el usuario que vas a usar con plenos derechos de acceso a mysql y el password del mismo y por otro lado los paths o rutas según cada sistema operativo a mysql para lectura y dump de las bases de datos


No deberias de tener problema al ejecutarlo pegando el código en la consola de ssh , una vez pegado este código dale a enter , si tienes problema de funcionamiento me comentas , también puedes copiarlo a un archivo de texto y cambiar la terminación de .txt por .sh , asegúrate de que no hay espacios y lo subes al servidor si usas filezilla por ejemplo o a través del editor nano de ssh o el que utilices , dentro de nano pegas el código y creas ese archivo en el propio servidor - quizás es lo más cómodo -

Ya me dirás que tal fue , un saludo

tassadar
15/08/2014, 22:45
Mira he probado otro script que hace algo similar a este pero el problema es siempre la parte de "do"

#! /bin/bash
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/backup/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="clave"
MYSQLDUMP=/usr/bin/mysqldump
mkdir -p "$BACKUP_DIR/mysql"
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)" `
echo ok1;
for db in $databases;
echo ok2;
do
echo ok3;
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done


El error es apartir del ok 1 el ok1 funciona y sale el resto dice error en la linea 11, no se no lo entiendo y los permisos son root, a nivel sintáctico está mal o le falta alguna coma????? , ya no se pq me tira error tampoco tiee ni espacios ni na

Saludos

Power
15/08/2014, 08:41
Hola,

Vale. Entonces arranca bien el scrip y el problema son los comandos que se lanzan desde algunas líneas del script.
Para saber qué comandos son los que fallan, pon entre cada línea del script un echo 1, echo 2, echo 3, etc
Así sabremos que comandos son los que fallan.

Saludos

tassadar
15/08/2014, 02:15
Lo de Hola Mundo se ejecuta perfecto, cuando lo pongo para arrancar el script me tira esto :

: no se encontró la orden
: no se encontró la orden
: no se encontró la orden
: no se encontró la orden
'@'localhost' (using password: YES)or user 'root
: no se encontró la orden
Se volcarán las siguientes bases de datos:
'@'localhost' (using password: YES)or user 'root
backup_mysql.sh: lÃ*nea 28: error sintáctico cerca del elemento inesperado `don e'
'ackup_mysql.sh: lÃ*nea 28: `done < databases.list


Los permisos del archivo son estos : -r-x--x--x 1 root root 1159 ago 14 14:39 backup_mysql.sh

No se pq no carbura a ver si me puedes exar una ayuda mas, gracias

Power
14/08/2014, 21:17
Hola,

Comprueba con ls -la el propietario, grupo y permisos del fichero.

Si los permisos son correctos, prueba ejecutar el script con sh backup_mysql.sh

Si sigue dando error prueba un scrip sencillo para ver si se ejecuta.
Por ejemplo:
Código:
#!/bin/bash
echo "Hola mundo"
Saludos

tassadar
14/08/2014, 20:55
Hola power, pues mira lo pongo en root desde ssh y si se llama asi con la extension .sh

Cuando ya estoy como root desde ssh pues pongo ./backup_mysql.sh

Tambien he probado a hacer esto antes de ejecutarlo : chmod +x backup_mysql.sh

Pero me sigue tirando el mismo fallo, uso Centos

Este script mola pq te hace el backup de la base de datos pero con cada una en un archivo diferente y eso mla para luego recuperar en vez de un dump total

Tambien he probao a quitar el # pero sigue yendo mal, al principio no me iba sino quitaba el #, no se a ver si me puedes decir algo , enga muchas gracias

Power
14/08/2014, 19:49
Hola,

Entiendo que ese script se llama backup_mysql.sh ¿Es así?
Y lo llamas desde la línea de comandos ¿Es así?
¿Has verificado los permisos de ese fichero?
¿Cómo es la llamada que haces en la línea de comandos?

Responde, por favor, esas 4 preguntas e intentaré echarte una mano en lo que pueda.

Saludos

tassadar
14/08/2014, 11:08
Hola uso este script en Centos , pero me da problemas


#!/bin/bash

myuser=admin
mypass=1234

args="-u"$myuser" -p"$mypass" --add-drop-database --add-locks --create-options --complete-insert --comments --disable-keys --dump-date --extended-insert --quick --routines --triggers"

mysql -u$myuser -p$mypass -e 'show databases' | grep -Ev "(Database|information_schema)" > databases.list

echo "Se volcarán las siguientes bases de datos:"
mysql -u$myuser -p$mypass -e 'select table_schema "DATABASE",convert(sum(data_length+index_lengt h)/1048576, decimal(6,2)) "SIZE (MB)" from information_schema.tables where table_schema!="information_schema" group by table_schema;'
CONT=1
while [ $CONT -eq 1 ]
do
echo -n "¿Desea continuar? (S/N): "
read -n 1 K
[[ "$K" == "N" || "$K" == "n" ]] && { echo ""; exit 0; }
[[ "$K" == "S" || "$K" == "s" ]] && { CONT=0; }
echo ""
done

while read DB
do
dump="dump_"$DB".sql"
echo -n $dump"... "
mysqldump ${args} $DB > $dump
echo "OK."
done < databases.list

rm databases.list



Tdo el rato me dice : -bash: backup_mysql.sh: no se encontró la orden