Такий сценарій використовуватиме клієнт 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")