Подтвердить что ты не робот

Резервные пользователи MySQL

Как мне сделать резервную копию пользователей MySQL и их привилегий?

Что-нибудь вроде mysqldump?

Я ищу что-то вроде:

mysqldump -d -u root -p MyTable > Schema.sql
4b9b3361

Ответ 1

mysql -BNe "select concat('\'',user,'\'@\'',host,'\'') from mysql.user where user != 'root'" | \
while read uh; do mysql -BNe "show grants for $uh" | sed 's/$/;/; s/\\\\/\\/g'; done > grants.sql

Ответ 2

Вы можете создать резервную базу данных mysql, используя

mysqldump -u root -p mysql > mysql.sql

и восстановить базу данных mysql, выполнив

 mysql -uroot -p mysql < mysql.sql

Не забывайте

FLUSH PRIVILEGES

после восстановления дампа.

Надеюсь, что это поможет...

Ответ 3

До сих пор мой опыт работы с MySQL я не видел ничего для резервного копирования пользователя и их привилегий с помощью командной строки.

Но я могу сделать резервную копию этих критически важных данных, создав резервную копию mysql

mysqldump -u root -p mysql > mysql.sql

Ответ 4

Пользователи и привилегии хранятся в базе данных с именем "mysql". Вы можете использовать mysqldump для резервного копирования таблиц в базе данных с именем "mysql".

Ответ 6

Хорошей практикой является использование скрипта для ежедневного резервного копирования пользователей MySQL и их привилегий. Взгляните на один из них:

#!/bin/sh

HOSTNAME="localhost"

mysql -h $HOSTNAME -B -N -e "SELECT CONCAT('\'', user,'\'@\'', host, '\'') FROM user WHERE user != 'debian-sys-maint' AND user != 'root' AND user != ''" mysql > mysql_all_users_$HOSTNAME.txt

while read line; do mysql -h $HOSTNAME -B -N -e "SHOW GRANTS FOR $line"; done < mysql_all_users_$HOSTNAME.txt > mysql_all_users_$HOSTNAME.sql

sed -i.bak 's/$/;/' mysql_all_users_$HOSTNAME.sql

rm mysql_all_users_$HOSTNAME.txt
rm mysql_all_users_$HOSTNAME.sql.bak

Результатом этого скрипта будет файл mysqldump с пользователями и привилегиями.

Постскриптум Если ваш MySQL требует пароль - поместите -p или -u username -p после mysql -h $HOSTNAME в двух местах.

Ответ 7

Приведенные выше сценарии дают общее представление, но они неэффективны. Они разветвляются/исполняют mysql n + 1 раз. Это можно сделать всего за два вызова MySQL

mysql ${logininfo} -B -N -e "SELECT CONCAT('\'',user,'\'@\'',host,'\'') from user where user != 'root'" mysql | \
while read uh
do
   echo "SHOW GRANTS FOR ${uh};"
done | mysql ${logininfo} -B -N | sed -e 's/$/;/' > ${outfile}

Если есть пользователи, отличные от root, которые вы не хотите использовать для резервного копирования, или укажите user! = 'what' в предложении where первого вызова mysql.

Ответ 8

вероятно, довольно очевидно для командной строки mysql, но для ответа на спину выше нужно было добавить -u root -ppassword после обеих команд mysql

mysql -u root -ppassword -BNe "выберите concat ('\' ', user,'\'@\' ', host,'\'') из mysql.user, где user!= 'root'" | при чтении uh; do mysql -u root -ppassword -BNe "показать гранты за $uh" | sed 's/$/;/; s/\\/\/г '; done > grants.sql;