Publi

Backup de usuarios en MySQL

4859841581_d254d4892b_o
Cuando hacemos un dump de una base de datos MySQL, se suelen ignorar las bases de datos test, mysql e information schema, es una buena práctica, entre otras cosas porque si sobreescribimos la tabla mysql, podemos tener problemas en el futuro sobre todo si hay algún cambio menor (o mayor) de versión.

Al final, la única información que nos interesa salvar de la base de datos mysql son los usuarios del sistema, con sus respectivas claves y permisos, que normalmente si tenemos varias aplicaciones corriendo sobre el mismo sistema de bases de datos, tendremos varios usuarios y no querremos perderlos.

Para ello, nos vale la orden SHOW GRANTS FOR usuario@host de MySQL. La cual podemos automatizar para que nos devuelva los permisos de todos los usuarios de golpe, con un pequeño bash script.

1
2
USERINFO="-uusuario -ppasswd"
mysql $USERINFO -BNe "select concat('SHOW GRANTS FOR \'',user,'\'@\'',host,'\'; ') from mysql.user where user != 'root'" | mysql -uroot $USERINFO -BN | sed 's/$/;/g' > users_backup.sql

En la variable USERINFO, almacenaremos los datos de inicio de sesión MySQL, normalmente, utilizaremos el usuario root y la clave: -uroot -pclaveroot

Con la primera llamada, generamos las peticiones a base de datos que queremos hacer más tarde, es decir, miramos cuáles son los usuarios del sistema y sus hosts, y generamos en cada fila la cadena:

SHOW GRANTS FOR ‘usuario’@’host’;

En la siguiente llamada, hacemos todas las peticiones devueltas anteriormente, lo que nos devolverá, por cada una de las peticiones algo como:

GRANT USAGE ON *.* TO ‘usuario’@’localhost’ IDENTIFIED BY PASSWORD ‘*3C3116A0C895632DE94E63FFF08863CC2397E18E’
GRANT ALL PRIVILEGES ON `database`.* TO ‘usuario’@’localhost’

Por supuesto, si el usuario tiene permisos sobre más tablas o bases de datos, aparecerán también aquí.

La tercera llamada, es sólo para completar cada línea con un ; (punto y coma), para que no nos dé problemas MySQL a la hora de restaurar.

Para restaurar, es tan simple como cargar el archivo SQL en la base de datos:

1
mysql -uusuario -ppaswwd < users_backup.sql

Foto: Jim McDougall (Flickr CC-by)

También podría interesarte....

Only 1 comment left Ir a comentario

  1. Pingback: Bitacoras.com /

Leave a Reply