Frage Wie kann ich die MySQL-Benutzertabelle von einem Server auf einen anderen kopieren? [Duplikat]


Diese Frage hat hier bereits eine Antwort:

Ich richte einen neuen MySQL-Server ein und ich möchte ihm den gleichen Satz von Benutzernamen, erlaubten Hosts und Passwörtern geben wie einem existierenden Server (der weggeht).

Würde es funktionieren, nur einen Speicherauszug der Benutzertabelle zu erstellen und dann auf den neuen Server zu laden?

Gibt es einen besseren Weg?


36
2017-07-06 21:54


Ursprung




Antworten:


oldserver$ mysqldump mysql > mysql.sql
newserver$ mysql mysql < mysql.sql
newserver$ mysql 'flush privileges;'

Tun Sie es, denken Sie daran, hinzuzufügen -u $USER und -p$PASSWORD nach Bedarf


35
2017-07-06 22:10



Die 'mysql' db enthält viel mehr Verwendungen als nur die Grants. Stellen Sie sicher, dass Sie alles übertragen möchten, bevor Sie die obigen Schritte ausführen. - Martijn Heemels
Ich erhalte den Fehler You can't use locks with log tables. Gibt es dafür irgendeine Arbeit? - Despertar
Wenn nur Benutzer benötigt werden, würde ich tun mysqldump mysql user > mysql.sql - Minras
Das ist nicht die richtige Antwort. Sie sollten die gesamte MySQL-Tabelle nicht migrieren. Benutzen SHOW GRANTS FOR ... um die aktuellen Privilegien zu extrahieren und dann GRANT auf dem neuen Host. - caponica
Im Namen von @eerick, der noch nicht genügend Rep für einen Kommentar hat: Verwenden Sie KEINE mysqldump mit einer der MySQL-Schematabellen. Dies kann schlimme Folgen haben. Ich habe tatsächlich nur die akzeptierte Antwort verwendet, um dieses Problem selbst zu lösen, und ich stieß auf alle möglichen Fehler. Im Endeffekt habe ich mich selbst aus der Datenbank gesperrt, weil mein Administratorkonto mein Kennwort nicht erkannte und ich keine neuen Benutzer erstellen konnte. Sie können möglicherweise mysqldump verwenden, wenn die Versionen identisch sind, aber ich würde es trotzdem nicht riskieren. - rrauenza


Ich würde mir die Percona-Toolkit. Die Beschreibung des pt-show-grants Werkzeug sagt alles ...

pt-show-grants Auszüge, Bestellungen und   druckt dann Zuschüsse für MySQL-Benutzer   Konten.

Warum würdest du das wollen? Es gibt   mehrere Gründe.

Die erste besteht darin, Benutzer leicht zu replizieren   von einem Server zum anderen; Sie können   Extrahieren Sie einfach die Zuschüsse von der   erster Server und Pipe die Ausgabe   direkt in einen anderen Server.

Die zweite Verwendung besteht darin, Ihre Zuschüsse zu platzieren   in Versionskontrolle ....


19
2017-07-09 02:07



Darf ich Sie bitten, ein Beispiel für diesen Befehl zu geben? - shgnInc
pt-show-grants --benutzer root --ask-pass - matheeeny


Während eine Müllkippe der mysql Die Datenbank würde meiner Erfahrung nach wahrscheinlich dazu führen, dass alle Zugriffe ordnungsgemäß dokumentiert und eingerichtet werden GRANT Aussagen sind viel besser. Dies hat zwei Vorteile:

  1. Sie werden Ihre Datenbanksicherheit und ihre Implementierung verstehen.
  2. Sie werden Zugriff entfernen, der nicht mehr benötigt wird.

13
2017-07-06 23:03





Dies wurde hier bereits gelöst Wie kann ich die Privilegien von MySQL exportieren und dann auf einen neuen Server importieren?


10
2017-07-09 15:02





Die akzeptierte Antwort (mysqldump zur Sicherung der mysql.user-Tabelle) ist ein sehr gefährlicher Ansatz, wenn Sie auf eine neue Serverversion migrieren.

Ich habe das in der Vergangenheit getan (Benutzer von Mysql 4 nach Mysql 5.1 migriert), und später hatte ich Probleme, Berechtigungen für meine Datenbankbenutzer zu gewähren oder zu ändern.

Dies geschieht, weil sich die Tabellenstruktur von mysql.users zwischen den MySQL-Serverversionen unterscheidet, wie hier erklärt:

https://dba.stackexchange.com/a/16441/18472 

Passen Sie also auf, wenn Sie Ihre Serverversion aktualisieren. Einige weitere Hinweise hier:

https://stackoverflow.com/a/13218162/710788


8
2018-01-17 18:10





mysqldump funktioniert, aber da die mysql-Datenbank ISAM verwendet, können Sie das Verzeichnis einfach auf den neuen Server kopieren. Sie finden dies an verschiedenen Stellen, aber der häufigste Speicherort für die MySQL-Datenbank ist / var / lib / mysql / mysql. Achten Sie darauf, mysql auf dem neuen Server zu stoppen, das alte Verzeichnis aus dem Weg zu räumen, das Verzeichnis zu kopieren und neu zu starten. Ein Beispiel, das Standardspeicherorte als Root verwendet:

# /etc/init.d/mysqld stop
# cd /var/lib/mysql
# mv mysql ../mysql.backup
# rsync -a root@oldserver:/var/lib/mysql/mysql .
# /etc/init.d/mysql start

4
2017-07-07 18:55



Die 'mysql' db enthält viel mehr Verwendungen als nur die Grants. Stellen Sie sicher, dass Sie alles übertragen möchten, bevor Sie die obigen Schritte ausführen. - Martijn Heemels


Es ist so einfach, Grant-Befehle auszuführen. Es ist wie

GRANT ALL für database.table zu "user" @ "host" identifiziert durch "password"

so

GRANT ALL für die Datenbank. * Für "jack" @ "localhost" identifiziert durch "somepass"


1
2017-07-07 18:16