Wie kann ich MySQL-Benutzer und ihre Berechtigungen sichern?
Etwas wie mysqldump?
Ich suche nach etwas wie:
mysqldump -d -u root -p MyTable > Schema.sql
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
Sie können die MySQL-Datenbank mit sichern
mysqldump -u root -p mysql > mysql.sql
und stellen Sie die MySQL-Datenbank wieder her, indem Sie sie ausführen
mysql -uroot -p mysql < mysql.sql
Vergiss es nicht
FLUSH PRIVILEGES
nach dem Wiederherstellen des Dumps.
Ich hoffe es hilft...
Meine Erfahrung mit MySQL habe ich bisher nicht gesehen, um Benutzer und ihre Privilegien über eine Befehlszeile zu sichern.
Aber ich kann diese kritischen Daten durch das Sichern von Mysql sichern
mysqldump -u root -p mysql > mysql.sql
Die Benutzer und Berechtigungen werden im Datenbanknamen 'mysql' gespeichert. Sie können mysqldump verwenden, um die Tabellen im Datenbanknamen 'mysql' zu sichern.
Die oben aufgeführten Skripte vermitteln einen allgemeinen Eindruck, sind jedoch ineffizient. Sie forken/führen mysql n + 1 mal aus. Es kann in nur zwei Aufrufen von MySQL durchgeführt werden
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}
Wenn es andere Benutzer als root gibt, die Sie nicht sichern möchten, verwenden Sie oder und geben Sie user! = 'Whatever' in der where-Klausel des ersten mysql-Aufrufs an.
Es hat sich bewährt, Skripte für die tägliche Sicherung von MySQL-Benutzern und deren Berechtigungen zu verwenden. Werfen Sie einen Blick auf eine:
#!/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
Ergebnis dieses Skripts ist eine mysqldump-Datei mit Benutzern und Berechtigungen.
P.S. Wenn für MySQL ein Passwort erforderlich ist, geben Sie -p
oder -u username -p
nach mysql -h $HOSTNAME
an zwei Stellen.
Percona hat dafür ein großartiges Werkzeug. pt-show-grants
gibt Benutzer und ihre Berechtigungen aus, damit Sie sie problemlos erneut laden können.
https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html