Exportando usuarios y permisos de MySql

3:39 pm Linux, Sistemas, Software Libre

Casi siempre que he tenido que migrar un servidor a otro nuevo, y he preferido usar los dumps de MySql en lugar de los binarios, me he encontrado con algún problemilla con los usuarios, passwords y permisos.

Esta última vez, al migrar una BD que estaba en 5.0 a la versión 5.1, las tablas mysql.user y mysql.db no eran compatibles, por lo que había que conseguir los grant’s. La solución la verdad es que no es bastante compleja, pero encontré un script que me ahorró media horilla de haber estado jugando con el CLI de mysql, y nuestro amigo sed

La solución es bastante sencilla y pasa por concatenar la salida de un show grants para cada uno de los usuarios de la tabla mysql.user. Es una función de BASH a la que sólo hay que pasar como parámetros los mismos que le pasaríamos al CLI de Mysql:

mygrants()
{
	mysql -B -N $@ -e “SELECT DISTINCT CONCAT(
		‘SHOW GRANTS FOR ”’, user, ”’@”’, host, ”’;’
		) AS query FROM mysql.user” |
	mysql $@ |
	sed ’s/(GRANT .*)/1;/;s/^(Grants for .*)/## 1 ##/;/##/{x;p;x;}’
}

Simplemente para sacar los grants del host local usando el usuario administrador de la BD y como password pwd, llamaríamos a la función desde cualquier script BASH tal que así:

mygrants --host=localhost --user=root --password=pwd
La salida de este comando se la podemos pasar por una tubería a otro cliente de mysql contra la BD de destino, o volcarla a un fichero para hacer después lo que queramos con ella.
Simple y rápido:
Deja tu comentario

Tu comentario

Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Advertencia: Está habilitada la moderación de comentarios y puede verse retrasada la publicación. No es necesario que reenvies tu comentario.