Сценарий, подобный этому, будет использовать клиент mysql cli для распечатки серии операторов предоставления, которые необходимо использовать для воссоздания учетных записей пользователей. Эта команда будет работать лучше всего, если у вас есть учетные данные базы данных .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
Если вы переходите с одной версии mysql на другую, вы можете использовать это вместо простого дампа базы данных mysql. Схема базы данных mysql иногда обновляется.
Это также позволит вам выбирать учетные записи, которые вы хотите воссоздать, если есть какая-то нечистота, которую вы хотели бы устранить.
Я недавно использовал это для пользователя, который включал пробелы в именах, что приводило в замешательство read
, так как IFS по умолчанию включает символ пробела в качестве разделителя. Моя новая и улучшенная команда, которая, казалось, лучше работала на странных системных именах пользователей.
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")