Um script como este usará o cliente mysql cli para imprimir uma série de instruções de concessão que você precisaria usar para recriar as contas de usuário. Este comando funcionará melhor se você tiver suas credenciais de banco de dados armazenadas em você .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
Se você está pulando de uma versão do mysql para outra, você pode querer usar isto ao invés de simplesmente descarregar o banco de dados mysql. O esquema do banco de dados mysql ocasionalmente é atualizado.
Isso também permitirá que você escolha e escolha as contas que deseja recriar, se houver alguma coisa que você queira eliminar.
Eu estava recentemente usando isso em um usuário que incluía espaços em nomes, o que confundiu read
, já que o IFS, por padrão, inclui o caractere de espaço como um separador. Meu novo e melhorado comando, que parecia funcionar melhor em nomes estranhos de sistemas.
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")