Probablemente la mayoría de vosotros trabajéis con bases de datos MySQL y tengáis scripts personalizados para hacer copias de seguridad de las mismas. Por ello, y por si os fuera de utilidad os dejo esta línea de comandos que hace un dump de todas las bases de datos de un servidor MySQL separadas en ficheros .sql independientes.
for DB in `mysql -e "show databases" -u USUARIO -pPASSWORD | grep -v Database`; do mysqldump -u USUARIO -pPASSWORD $DB > "$DB.sql"; done
Como podéis ver es bastante sencillo, hacemos un bucle con la salida del comando «show databases» que vuelca por pantalla todas las bases de datos del servidor, eliminamos la única línea que no nos interesa (la que contiene Database) y vamos haciendo una a una la copia de seguridad de cada una de las bases de datos con mysqldump. Únicamente tendréis que modificar el usuario y clave con el que conectar al servicio.
Buenas!
Perfecto. Yo pondría la contraseña en $HOME/.my.cnf por si acaso y además no haría falta meter usuario y password. Bueno, y por comodidad :-)
Saludos.
Efectivamente. Realmente yo la suelo tener puesta, pero para el ejemplo he preferido ponerlo y que luego no hubiera alguien que le pudiera fallar.
Para el que no sepa hacerlo:
https://rm-rf.es/mysql-conectar-servidor-sin-escribir-password-clave/
Hola Alex,
Te puedes ahorrar el «grep» si llamas al primer «mysql» con la opción «-B» para trabajar en modo batch:
for DB in `mysql -Bse ‘SHOW DATABASES’` ; do mysqldump $DB | bzip2 > $DB.sql.bz2 ; done
Saludos!
Muy buena, gracias!
Una pregunta, los dumps que este comando genere, en que directorio se guardarán ?
En la ruta en la que ejecutes y se encuentre el script: > «$DB.sql»;
Muchas gracias!!! Terrible blog y una respuesta increiblemente rapida!!!
Siguiendo el ejemplo que habéis planteado yo le he agregado la fecha a cada backup:
for DB in `mysql -Bse «show databases» -uusuario -pcontraseña`; do mysqldump -usuario -pcontraseña $DB | bzip2 -c > «bkp_.$DB.mysql_`date +%a%d%b%Y_%H-%M`.sql.bz2»; done
Gracias por el aporte Roque!