Un script como este usará el cliente mysql cli para imprimir una serie de declaraciones de subvención que necesitaría usar para recrear las cuentas de usuario. Este comando funcionará mejor si tiene sus credenciales de base de datos almacenadas en usted .my.cnf
#!/bin/bash
# adapted from (http://www.pyrosoft.co.uk/blog/2006/10/18/show-grants-for-all-users-on-mysql/)
(
mysql --batch --skip-column-names -e "SELECT user, host FROM user" mysql
) | while read user host
do
echo "# $user @ $host"
mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
done
Si está saltando de una versión de mysql a otra, puede usar esto en lugar de simplemente volcar la base de datos mysql. El esquema de la base de datos mysql ocasionalmente se actualiza.
Esto también le permitirá elegir y elegir las cuentas que desea volver a crear, si hay algún problema que le gustaría eliminar.
Recientemente estaba usando esto en un usuario que incluía espacios en los nombres, lo que confundía read
, ya que IFS por defecto incluye el carácter de espacio como separador. Mi nuevo y mejorado comando, que parecía funcionar mejor en sistemas con nombres de usuario extraños.
IFS=$'\t'; while read user host; do
echo "user:$user host:$host"
mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
echo ""
done < <(mysql --batch --skip-column-names -e "SELECT user, host FROM mysql.user")