Backup de todas las bases de datos MySQL con una sola línea de comandos

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.

10 comentarios en “Backup de todas las bases de datos MySQL con una sola línea de comandos

  1. 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.

  2. 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!

  3. 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

Comments are closed.