Antworten:
Wenn Sie die Benutzer auf einen anderen DB-Server verschieben, auf dem dieselbe Hauptversion von MySQL ausgeführt wird, reicht das Kopieren mysql.user
nicht aus. Wenn die Benutzer Zugriff auf bestimmte Datenbanken haben, werden beim Kopieren mysql.user
der Benutzer und das Kennwort angezeigt.
Dann müssten Sie Folgendes kopieren
mysql.db
für Zuschüsse auf Datenbankebenemysql.tables_priv
für Zuschüsse auf Tabellenebenemysql.columns_priv
für Zuschüsse auf SpaltenebeneHier ist ein logischer Weg, um es zu sichern: als SQL GRANT-Befehle !!!
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}
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}
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
-N
auch im letzten MySQL-Befehl hinzufügen .
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
Verwenden Sie das MySQL-Tool: mysqluserclone
mysqluserclone --source=root:PASSWORD@localhost --list -d
Sie erhalten eine Liste aller Benutzer und die entsprechenden GRANT
Anweisungen.
Sie können auch --destination
Parameter verwenden, wenn Sie Remotezugriff auf Ihre neue Datenbank haben.
pt-show-grants -uroot -p > ${GRANT_FILE}
hat perfekt funktioniert.