Ich kann die Datenbanken mit mysqldump exportieren / importieren und das ist in Ordnung, aber wie erhalte ich die Berechtigungen für den neuen Server?
Für zusätzliche Punkte gibt es bereits einige bestehende Datenbanken auf der neuen. Wie importiere ich die alten Server-Privilegien, ohne die bestehenden zu beschädigen?
Alter Server: 5.0.67-Community
Neuer Server: 5.0.51a-24 + lenny1
BEARBEITEN: Ich habe einen Speicherauszug der Datenbank "mysql" vom alten Server und möchte nun wissen, wie die Datenbank "mysql" auf dem neuen Server ordnungsgemäß zusammengeführt werden kann.
Ich habe einen direkten 'Import' mit phpMyAdmin versucht und einen Fehler bezüglich eines Duplikats erhalten (eines, das ich bereits manuell migriert habe).
Hat jemand eine elegante Möglichkeit, die beiden 'mysql'-Datenbanken zusammenzuführen?
Antworten:
Leg dich nicht mit der MySQL-Datenbank an. Dort ist viel mehr los als nur die Benutzertabelle. Ihre beste Wette ist der Befehl " SHOW GRANTS FOR". Ich habe eine Menge CLI-Wartungs-Aliase und -Funktionen in meinem .bashrc (tatsächlich meine .bash_aliases, die ich in meinem .bashrc enthalte). Diese Funktion:
Der erste mysql-Befehl generiert mit SQL gültiges SQL, das an den zweiten mysql-Befehl weitergeleitet wird. Die Ausgabe wird dann durch sed geleitet, um hübsche Kommentare hinzuzufügen.
Mit dem $ @ im Befehl können Sie Folgendes aufrufen: mygrants --host = prod-db1 --user = admin --password = secret
Sie können Ihr vollständiges Unix-Toolkit folgendermaßen verwenden:
Das ist DER richtige Weg, um Benutzer zu bewegen. Ihre MySQL-ACL wird mit reinem SQL geändert.
quelle
user
Tabelle einen Benutzer mit Host haben%
, aber dann in derdb
Tabelle Einträge haben, bei denenhost
es sich um einen expliziten Wert handelt, werden diese Einträge in derdb
Tabelle nicht mit dieser Methode abgerufen.-r
dem 2. mysql-Befehl in der Funktion hinzu, und die doppelten Escape-Zeichen werden nicht von ausgegebenmysql
. zB:mysql -r $@
Es gibt zwei Methoden zum Extrahieren von SQL Grants aus einer MySQL-Instanz
METHODE 1
Sie können pt-show-grants von Percona Toolkit verwenden
Methode # 2
Sie können
pt-show-grants
mit den folgenden emulierenBei beiden Methoden wird ein reiner SQL-Speicherauszug der MySQL-Berechtigungen erstellt. Sie müssen das Skript nur noch auf einem neuen Server ausführen:
Versuche es !!!
quelle
Richard Bronoskys Antwort war für mich äußerst nützlich. Danke vielmals!!!
Hier ist eine kleine Variation, die für mich nützlich war. Es ist hilfreich, um Benutzer zu übertragen, z. B. zwischen zwei Ubuntu-Installationen, auf denen phpmyadmin ausgeführt wird. Nur Dump-Berechtigungen für alle Benutzer außer root, phpmyadmin und debian-sys-maint. Der Code ist dann
quelle
grep rails_admin
Ihnen zeigen kann, wie Sie dies tun können, ohne für jeden Kantenfall eine spezielle Funktion zu erstellen. Verwenden Sie Greps "Invert-Match" -Option wiemygrants --host=prod-db1 --user=admin --password=secret | grep -Ev 'root|phpmyadmin|debian-sys-maint' | mysql --host=staging-db1 --user=admin --password=secret
Oder verwenden Sie das Percona-Toolkit (früher Maatkit) und verwenden Sie
pt-show-grants
(odermk-show-grants
) für diesen Zweck. Keine Notwendigkeit für umständliche Skripte und / oder gespeicherte Prozeduren.quelle
Sie können die 'mysql'-Datenbank mysqldumpen und in die neue importieren. Ein flush_privileges oder Neustart ist erforderlich, und Sie möchten auf jeden Fall zuerst die vorhandene mysq-Datenbank sichern.
Um zu vermeiden, dass Ihre vorhandenen Berechtigungen entfernt werden, müssen Sie die Zeilen in den Berechtigungstabellen (db, columns_priv, host, func usw.) anhängen und nicht ersetzen.
quelle
Sie können es auch als gespeicherte Prozedur ausführen:
und nenne es mit
Leiten Sie dann die Ausgabe über den Befehl Richards sed, um eine Sicherung der Berechtigungen zu erhalten.
quelle
Obwohl die Antwort von @Richard Bronosky richtig zu sein scheint, stieß ich auf diese Frage, nachdem ich versucht hatte, eine Reihe von Datenbanken von einem Server auf einen anderen zu migrieren, und die Lösung war viel einfacher:
Zu diesem Zeitpunkt waren alle meine Daten sichtbar, wenn ich mich als angemeldet habe
root
, diemysql.user
Tabelle alles enthielt, was ich erwartet hatte, aber ich konnte mich nicht als einer der anderen Benutzer anmelden und fand diese Frage, vorausgesetzt, ich müsste sie erneut eingeben. erteilt dieGRANT
Anweisungen.Es stellte sich jedoch heraus, dass der MySQL-Server lediglich neu gestartet werden musste, damit die aktualisierten Berechtigungen in den
mysql.*
Tabellen wirksam wurden:Hoffentlich hilft das jemand anderem dabei, eine einfache Aufgabe zu erfüllen!
quelle
Wie wäre es mit einem PHP-Skript? :)
Zeigen Sie den Quellcode für dieses Skript an und Sie haben alle Berechtigungen aufgelistet:
quelle
Erstellen Sie eine Shell-Skriptdatei mit dem folgenden Code:
##############################################3 #**** Führen Sie es dann auf der Shell folgendermaßen aus: Sie werden aufgefordert, das root-Passwort zweimal einzugeben, und dann wird GRANTS SQL auf dem Bildschirm angezeigt. ****
quelle
Einzeiler macht so ziemlich dasselbe wie der Awesome
pt-show-grants
:Nur auf Basis von Unix-Tools, keine zusätzliche Software erforderlich.
Ausführen aus einer Bash-Shell, vorausgesetzt, Sie haben eine Funktion,
.my.cnf
mit der das Kennwort Ihresmysql root
Benutzers gelesen werden kann.quelle