Як скопіювати привілеї користувачів за допомогою MySQL?


12

У мене встановлення MySQL з багатьма базами даних та користувачами, які мені потрібні для переходу до нової установки MySQL. Я можу використовувати phpMyAdmin для експорту, а потім імпортувати бази / таблиці, але я не знаю нічого, щоб перемістити користувачів та дозволи. Як я можу це зробити легко?

Відповіді:


17

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

3

Це створить SHOW GRANTS;файл для кожного користувача.

Потім перегукуйте кожного користувача SHOW GRANTS;та додайте крапку з комою до кожного рядка.

MYSQL_CONN="-uroot -prootpassword"
SQLSTMT="SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';')"
SQLSTMT="${SQLSTMT} FROM mysql.user WHERE user<>''"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > /tmp/ShowGrants.sql
mysql ${MYSQL_CONN} -ANe < /tmp/ShowGrants.sql | sed 's/$/;/g' > MySQLUserGrants.sql
rm -f /tmp/ShowGrants.sql

Ви також можете завантажити та використовувати ці інструменти, щоб зробити те саме:

Спробувати !!!


2

Я вважаю, що ви повинні мати змогу перемістити ці дані, створивши резервну копію та відновлення mysqlбази даних.


Зокрема, таблиця mysql.user
Купи

2
Вам потрібно забезпечити, щоб обидва екземпляри MySQL працювали в одній і тій же основній версії, інакше вам потрібно буде запустити сценарії оновлення в комплекті з цільовим сервером MySQL.
Максвелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.