Un script comme celui-ci utilisera le client mysql cli pour imprimer une série de déclarations de subvention que vous devrez utiliser pour recréer les comptes d'utilisateurs. Cette commande fonctionnera mieux si vous avez vos informations d'identification de base de données stockées en vous .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 vous passez d'une version de mysql à une autre, vous voudrez peut-être l'utiliser au lieu d'un simple vidage de la base de données mysql. Le schéma de la base de données mysql est parfois mis à jour.
Cela vous permettra également de choisir les comptes que vous souhaitez recréer, s'il y a une cruauté que vous souhaitez éliminer.
J'utilisais récemment cela sur un utilisateur qui incluait des espaces dans les noms, ce qui était confus read
, car IFS par défaut inclut le caractère espace comme séparateur. Ma commande nouvelle et améliorée, qui semblait fonctionner mieux sur des systèmes de noms d'utilisateur étranges.
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")