Exportando usuarios y permisos de MySql
January 6, 2010 3:39 pm Linux, Sistemas, Software LibreCasi 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
