Taki skrypt użyje klienta mysql cli do wydrukowania serii instrukcji dotacji, których należy użyć do odtworzenia kont użytkowników. To polecenie będzie działać najlepiej, jeśli przechowywane są poświadczenia bazy danych .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
Jeśli przeskakujesz z jednej wersji mysql do innej, możesz chcieć użyć tego zamiast zwykłego zrzutu bazy danych mysql. Schemat bazy danych mysql czasami się aktualizuje.
Umożliwi to również wybranie kont, które chcesz ponownie utworzyć, jeśli istnieje cruft, który chcesz wyeliminować.
Ostatnio używałem tego na użytkowniku, który zawarł spacje w nazwach, co pomieszało read
, ponieważ IFS domyślnie zawiera spację jako separator. Moje nowe i ulepszone polecenie, które wydawało się działać lepiej na dziwnych nazwach systemów.
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")