Ein solches Skript verwendet den mysql cli-Client, um eine Reihe von Grant-Anweisungen auszudrucken, die Sie zum erneuten Erstellen der Benutzerkonten benötigen würden. Dieser Befehl funktioniert am besten, wenn Ihre Datenbankanmeldeinformationen in Ihrer Datei .my.cnf gespeichert sind
#!/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
Wenn Sie von einer Version von MySQL zu einer anderen wechseln, können Sie dies anstelle eines einfachen Speicherauszugs der MySQL-Datenbank verwenden. Das Schema der MySQL-Datenbank wird gelegentlich aktualisiert.
Auf diese Weise können Sie auch Konten auswählen, die Sie neu erstellen möchten.
Ich habe dies kürzlich für einen Benutzer verwendet, der Leerzeichen in Namen enthielt, was verwirrend ist read
, da IFS standardmäßig das Leerzeichen als Trennzeichen enthält. Mein neuer und verbesserter Befehl, der auf seltsamen Benutzernamen besser zu funktionieren schien.
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")