Exportieren Sie alle MySQL-Benutzer

7

Ich muss alle Benutzer einer MySQL-Datenbank (einschließlich Berechtigungen) für eine Migration exportieren. Es gibt über 5.000 Benutzer. Wie geht das am besten?

Soll ich den mysql.userTisch einfach wegwerfen ?

Justin
quelle

Antworten:

8

Wenn Sie die Benutzer auf einen anderen DB-Server verschieben, auf dem dieselbe Hauptversion von MySQL ausgeführt wird, reicht das Kopieren mysql.usernicht aus. Wenn die Benutzer Zugriff auf bestimmte Datenbanken haben, werden beim Kopieren mysql.userder Benutzer und das Kennwort angezeigt.

Dann müssten Sie Folgendes kopieren

  • mysql.db für Zuschüsse auf Datenbankebene
  • mysql.tables_priv für Zuschüsse auf Tabellenebene
  • mysql.columns_priv für Zuschüsse auf Spaltenebene

Hier ist ein logischer Weg, um es zu sichern: als SQL GRANT-Befehle !!!

VORSCHLAG # 1

Wenn Sie Percona Toolkit bereits installiert haben, führen Sie pt-show- grant für eine Textdatei aus

GRANT_FILE=MyDatabaseUSers.sql
pt-show-grants -uroot -p > ${GRANT_FILE}

VORSCHLAG # 2

Wenn Sie kein Percona Toolkit haben und nicht warten können, ist hier meine persönliche Emulation davon

GRANT_CMDS=/tmp/ShowGrantsToExport.sql
GRANT_FILE=MyDatabaseUSers.sql
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';')"
SQL="${SQL} FROM mysql.user WHERE user<>'' AND host<>''"
mysql ${MYSQL_CONN} -ANe"${SQL}" > ${GRANT_CMDS}
mysql ${MYSQL_CONN} < ${GRANT_CMDS} | sed 's/$/;/g' > ${GRANT_FILE}

EPILOG

Auf dem neuen DB Server melden Sie sich nach der Migration der Daten bei mysql als root an und führen sie aus

mysql> source MyDatabaseUSers.sql

VERSUCHE ES !!!

RolandoMySQLDBA
quelle
Vielen Dank. pt-show-grants -uroot -p > ${GRANT_FILE}hat perfekt funktioniert.
Justin
Nützlich! Ich denke, Sie müssen den -Nauch im letzten MySQL-Befehl hinzufügen .
Cristian Porta
0

Hier ist das obige Skript von Rolando, aber prägnanter und unix-artiger. Übergeben Sie einfach Ihre Optionen an den Befehl wie an MySQL. Es wird an stdout ausgegeben. Die Ausgabe kann direkt in MySQL zurückgeführt werden.

#!/bin/sh
mysql -AN <<'SQL' "$@" | mysql "$@" | sed 's/$/;/;/^Grants for /d'

SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';')
FROM mysql.user WHERE user<>'' AND host<>''
ORDER BY user, host
;

SQL
Otheus
quelle
0

Verwenden Sie das MySQL-Tool: mysqluserclone

mysqluserclone  --source=root:PASSWORD@localhost --list -d

Sie erhalten eine Liste aller Benutzer und die entsprechenden GRANTAnweisungen.

Sie können auch --destinationParameter verwenden, wenn Sie Remotezugriff auf Ihre neue Datenbank haben.

Pascal Tarife
quelle