GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich die Privilegien aus MySQL exportieren und dann auf einen neuen Server importieren?

Lösung 1:

Leg dich nicht mit der mysql db an. Dort passiert viel mehr als nur die Benutzertabelle. Ihre beste Wahl ist der Befehl "SHOW GRANTS FOR". Ich habe viele CLI-Wartungsaliase und -funktionen in meiner .bashrc-Datei (eigentlich meine .bash_aliases, die ich in meiner .bashrc-Datei beziehe). Diese Funktion:

mygrants()
{
  mysql -B -N [email protected] -e "SELECT DISTINCT CONCAT(
    'SHOW GRANTS FOR \'', user, '\'@\'', host, '\';'
    ) AS query FROM mysql.user" | \
  mysql [email protected] | \
  sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'
}

Der erste mysql-Befehl verwendet SQL, um gültiges SQL zu generieren, das an den zweiten mysql-Befehl weitergeleitet wird. Die Ausgabe wird dann durch sed geleitet, um hübsche Kommentare hinzuzufügen.

Das [email protected] im Befehl ermöglicht es Ihnen, ihn wie folgt aufzurufen:mygrants --host=prod-db1 --user=admin --password=secret

Sie können Ihr vollständiges Unix-Toolkit wie folgt verwenden:

mygrants --host=prod-db1 --user=admin --password=secret | grep rails_admin | mysql --host=staging-db1 --user=admin --password=secret

Das ist DER richtige Weg, um Nutzer zu bewegen. Ihre MySQL-ACL wird mit reinem SQL modifiziert.

Lösung 2:

Es gibt zwei Methoden zum Extrahieren von SQL Grants aus einer MySQL-Instanz

METHODE #1

Sie können pt-show-grants verwenden aus dem Percona Toolkit

MYSQL_CONN="-uroot -ppassword"
pt-show-grants ${MYSQL_CONN} > MySQLUserGrants.sql

METHODE #2

Sie können pt-show-grants emulieren mit folgendem

MYSQL_CONN="-uroot -ppassword"
mysql ${MYSQL_CONN} --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

Beide Methoden erzeugen einen reinen SQL-Dump der MySQL-Zuteilungen. Es bleibt nur noch, das Skript auf einem neuen Server auszuführen:

mysql -uroot -p -A < MySQLUserGrants.sql

Probieren Sie es aus !!!

Lösung 3:

Die Antwort von Richard Bronosky war für mich äußerst nützlich. Vielen Dank!!!

Hier ist eine kleine Variation, die für mich nützlich war. Es ist hilfreich für die Übertragung von Benutzern, z. zwischen zwei Ubuntu-Installationen, auf denen phpmyadmin ausgeführt wird. Geben Sie einfach die Privilegien für alle Benutzer außer root, phpmyadmin und debian-sys-maint aus. Der Code lautet dann

mygrants()
{
mysql -B -N [email protected] -e "SELECT DISTINCT CONCAT(
'SHOW GRANTS FOR ''', user, '''@''', host, ''';'
) AS query FROM mysql.user WHERE user NOT IN ('root','phpmyadmin','debian-sys-maint')"  | \
mysql [email protected] | \
sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'
}

Lösung 4:

Oder verwenden Sie percona-toolkit (ehemals maatkit) und verwenden Sie pt-show-grants (oder mk-show-grants ) zu diesem Zweck. Keine Notwendigkeit für umständliche Skripte und/oder gespeicherte Prozeduren.

Lösung 5:

Sie können die 'mysql'-Datenbank mysqldump und in die neue importieren; ein flush_privileges oder Neustart ist erforderlich, und Sie sollten auf jeden Fall zuerst die vorhandene mysq-Datenbank sichern.

Um das Entfernen Ihrer vorhandenen Berechtigungen zu vermeiden, stellen Sie sicher, dass Sie Zeilen in den Berechtigungstabellen (db, column_priv, host, func usw.) anhängen und nicht ersetzen.


Linux
  1. So fügen Sie einen neuen MySQL-Benutzer hinzu und gewähren Zugriffsrechte

  2. Wie lade ich eine Datei von einem FTP-Server herunter und lösche sie dann automatisch vom Server, sobald der Download abgeschlossen ist?

  3. So importieren Sie die Exportdatenbank in MYSQL MariaDB

  4. Wie kann ich die Größe von Dateien und Verzeichnissen in Linux sehen?

  5. Wie erzwinge ich Linux, eine neue IP-Adresse vom DHCP-Server erneut zu beziehen?

So exportieren und importieren Sie virtuelle VirtualBox-Maschinen

So erhalten Sie die beste Leistung vom Nginx-Server

So installieren Sie Nginx, MySQL und PHP (LEMP) auf einem Ubuntu 15.04-Server

So importieren Sie einen VM-Export auf Windows Server 2012

So installieren und verwenden Sie MySQL Workbench unter Ubuntu 18.04

Wie kann ich Protokollmeldungen vom LAMP-Server unter Ubuntu 10.04 erhalten?