Как скопировать привилегии пользователя с помощью MySQL?

Как скопировать привилегии пользователя с помощью MySQL?

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

решение1

Такой скрипт будет использовать клиент 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")

решение2

Это создаст 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} -AN < /tmp/ShowGrants.sql | sed 's/$/;/g' > MySQLUserGrants.sql
rm -f /tmp/ShowGrants.sql

Вы также можете загрузить и использовать эти инструменты, чтобы сделать то же самое:

Попробуйте!!!

решение3

Я считаю, что вы сможете перенести эти данные, выполнив резервное копирование и восстановление mysqlбазы данных.

Связанный контент