Um script como esse 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 usar isso em vez de simplesmente despejar o banco de dados mysql. O esquema do banco de dados mysql ocasionalmente é atualizado.
Isso também permitirá que você escolha as contas que deseja recriar, se houver algum problema que você queira eliminar.
Recentemente, eu estava usando isso em um usuário que incluía espaços nos nomes, o que confundia read
, pois o IFS por padrão inclui o caractere de espaço como um separador. Meu comando novo e aprimorado, que parecia funcionar melhor em nomes de usuário estranhos dos 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")