Antes que nada es menester, nobleza bloggera obliga, disculparme porque hace mucho (MUCHO!) que no posteo nada en el blog. Ando con poco tiempo y pocas cosas interesantes para decir. Pero yendo a lo que nos ocupa…
En estos días necesitaba hacer un backup de todas las bases de datos de un servidor MySQL, pero no me servía hacer mysqldump –all-databases, porque necesitaba tenerlo en archivos separados (uno para cada DB). Seguramente es algo que ya debe haber sido hecho mil veces, pero no tenía tampoco muchas ganas de perder mucho tiempo en Google (una búsqueda rápida no me dio resultados útiles), así que hice el siguiente script muuy sencillo que obtiene todas las DB de un server y hace un dump de cada una. Se los dejo por si les sirve, capaz los saque de un apuro en alguna ocasión.
#!/bin/bash
PORT="3306"
USER="root"
PASSWORD="yourpassword"
mysql=/usr/bin/mysql
mysqldump=/usr/bin/mysqldump
TABLES=`$mysql -P $PORT -u $USER --password=$PASSWORD --execute="SHOW DATABASES;" |awk '{print($1)}' |grep -v "Database" |grep -v "information_schema"`
for table in $TABLES; do
echo "Backing up $table..."
file=$table.backup_`date +%Y%m%d`.sql
$mysqldump -P $PORT -u $USER --password=$PASSWORD $table > $file
echo "Compressing backup..."
gzip $file
done
Nota: la definición del puerto es innecesaria, pero yo la tuve que hacer porque en mi caso el servidor no estaba corriendo en el puerto default (3306) sino en otro.
Dos cosas.
El gzip me tira que necesita el parametro -f se lo agregue y salio.
Y yo le agregaria un rm -f $file, para que no ocupe espacio al dope
En qué SO te pidió el -f?
El rm no hace falta porque gzip justamente te comprime el archivo que tenés, no crea uno nuevo.
Lo otro que podés hacer es lo siguiente:
$mysqldump -P $PORT -u $USER –password=$PASSWORD $table |gzip -f > $file.gz
Eso te evita gzippear el archivo, porque va comprimiendo el output de mysqldump. En todo caso habría que probar si hay una diferencia considerable de tiempo de procesamiento.
Debian Lenny.
Me dejaba el file .sql por eso le agregue el rm -f