Vorwort: Ich bin kürzlich auf das Problem der Instanzmigration gestoßen. Nachdem die Daten migriert wurden, mussten auch die Datenbankbenutzer und -berechtigungen migriert werden. Wenn ich ein logisches Backup durchführe, schließe ich normalerweise die MySQL-Systembibliothek aus, sodass das Backup keine Informationen zu Datenbankbenutzern enthält. Wenn Sie zu diesem Zeitpunkt benutzerbezogene Informationen migrieren möchten, können Sie die folgenden drei Lösungen verwenden. In ähnlicher Weise können wir die folgenden drei Lösungen auch verwenden, um datenbankkontobezogene Informationen zu sichern. (Diese Lösung ist für MySQL 5.7, bei anderen Versionen sind die Unterschiede etwas anders) 1.mysqldump exportiert benutzerbezogene Informationen logisch Wir wissen, dass das Kennwort und die Berechtigungsinformationen des Datenbankbenutzers in der Systembibliothek MySQL gespeichert sind. Verwenden Sie mysqldump, um die relevanten Tabellendaten zu exportieren. Wenn Benutzer migriert werden müssen, können wir diese Daten bei Bedarf in eine andere Instanz einfügen. Lassen Sie uns dies demonstrieren: #Exportieren Sie nur die Benutzer-, Datenbank- und Tabellen_priv in der MySQL-Datenbank. #Wenn Sie über die Berechtigungen für die Spalten verfügen, können Sie die Daten der Tabelle „columns_priv“ exportieren. #Wenn GTID in der Datenbank aktiviert ist, fügen Sie beim Exportieren am besten --set-gtid-purged=OFF hinzu. mysqldump -uroot -proot mysql Benutzer db tables_priv -t --skip-extended-insert > /tmp/user_info.sql #Spezifische Informationen exportieren-- -- Daten für Tabelle „Benutzer“ ausgeben -- SPERRT TABELLEN `Benutzer` SCHREIBEN; /*!40000 ALTER TABLE `Benutzer` DISABLE KEYS */; INSERT INTO `user` VALUES ('%', 'root', 'Y ... 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B','N','2019-03-06 03:03:15',NULL,'N'); INSERT INTO `user` VALUES ('localhost','mysql.session','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','',_binary '',_binary '',0,0,0,0,'mysql_na tive_password','*DIES IST KEIN GÜLTIGES PASSWORT, DAS HIER VERWENDET WERDEN KANN','N','2019-03-06 02:57:40',NULL,'Y'); INSERT INTO `user` VALUES ('localhost','mysql.sys','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','_binary '',_binary '',0,0,0,0,'mysql_native _password','*DIES IST KEIN GÜLTIGES PASSWORT, DAS HIER VERWENDET WERDEN KANN','N','2019-03-06 02:57:40',NULL,'Y'); INSERT INTO `user` VALUES ('%','test','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','',_binary '',_binary '',0,0,0,0,'mysql_native_password','*' 94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29','N','2019-04-19 06:24:54',NULL,'N'); INSERT INTO `user` VALUES ('%', 'lesen', 'J', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', ''', '_binary', '_binary', 0,0,0,0, 'mysql_native_password', '*' 2158DEFBE7B6FC24585930DF63794A2A44F22736','N','2019-04-19 06:27:45',NULL,'N'); INSERT INTO `user` VALUES ('%','test_user','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','_binary '',_binary '',0,0,0,0,'mysql_native_password d','*8A447777509932F0ED07ADB033562027D95A0F17','N','2019-04-19 06:29:38',NULL,'N'); /*!40000 ALTER TABLE `Benutzer` ENABLE KEYS */; TABELLEN ENTSPERREN; -- -- Daten für Tabelle „db“ ausgeben -- SPERRT TABELLEN `db` SCHREIBEN; /*!40000 ALTER TABLE `db` SCHLÜSSEL DISABLE */; EINFÜGEN IN „db“ WERTE ('localhost', 'performance_schema', 'mysql.session', 'J', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'); EINFÜGEN IN „db“ WERTE ('localhost', 'sys', 'mysql.sys', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y'); EINFÜGEN IN „db“ WERTE ('%', 'test_db', 'test', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'Y', 'N', 'Y', 'N', 'Y', 'N', 'Y', 'N', 'Y', 'N', 'N', 'Y', 'N', 'N', 'Y', 'N', 'N', 'Y', 'N', 'N'); /*!40000 ALTER TABLE `db` SCHLÜSSEL AKTIVIEREN */; TABELLEN ENTSPERREN; -- -- Daten für Tabelle „tables_priv“ ausgeben -- SPERRT TABELLEN `tables_priv` SCHREIBEN; /*!40000 ALTER TABLE `tables_priv` SCHLÜSSEL DISABLEN */; INSERT INTO `tables_priv` VALUES ('localhost', 'mysql', 'mysql.session', 'Benutzer', 'boot@connecting host', '0000-00-00 00:00:00', 'Auswählen', ''); INSERT INTO `tables_priv` VALUES ('localhost', 'sys', 'mysql.sys', 'sys_config', 'root@localhost', '2019-03-06 02:57:40', 'Auswählen', '); INSERT INTO `tables_priv` VALUES ('%','test_db','test_user','t1','root@localhost','0000-00-00 00:00:00','Auswählen,Einfügen,Aktualisieren,Löschen',''); /*!40000 ALTER TABLE `tables_priv` SCHLÜSSEL AKTIVIEREN */; TABELLEN ENTSPERREN; #Fügen Sie die erforderlichen Daten in die neue Instanz ein, um denselben Benutzer und dieselben Berechtigungen zu erstellen 2. Benutzerdefinierter Skriptexport Verketten Sie zunächst die Anweisungen, um einen Benutzer zu erstellen: WÄHLEN KONKAT( 'Benutzer erstellen \'', Benutzer, '\'@\'', Gastgeber, '\'' ' IDENTIFIZIERT DURCH PASSWORT \'', Authentifizierungszeichenfolge, '\';' ) AS CreateUserQuery AUS mysql.`Benutzer` WO `Benutzer` NICHT IN ( „mysql.sitzung“, 'mysql.sys' ); #Ergebnis: Nach der Ausführung in der neuen Instanz kann ein Benutzer mit demselben Passwort erstellt werden mysql> SELECT -> CONCAT( -> 'Benutzer erstellen \'', -> Benutzer, -> '\'@\'', -> Gastgeber, -> '\'' -> ' IDENTIFIZIERT DURCH PASSWORT \'', -> Authentifizierungszeichenfolge, -> '\';' -> ) AS Benutzerabfrage erstellen -> VON -> mysql.`Benutzer` -> WO -> `Benutzer` NICHT IN ( -> "mysql.sitzung", -> 'mysql.sys' -> ); +-----------------------------------------------------------------------------------------------------------------+ | Benutzerabfrage erstellen | +-----------------------------------------------------------------------------------------------------------------+ | Benutzer „root“@„%“ erstellen, IDENTIFIZIERT DURCH PASSWORT „*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B“; | | Benutzer „Test“@„%“ erstellen, IDENTIFIZIERT DURCH PASSWORT „*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29“; | | Benutzer „read“@„%“ erstellen, IDENTIFIZIERT DURCH PASSWORT „*2158DEFBE7B6FC24585930DF63794A2A44F22736“; | | Benutzer „test_user“@„%“ erstellen, IDENTIFIZIERT DURCH PASSWORT „*8A447777509932F0ED07ADB033562027D95A0F17“; | +-----------------------------------------------------------------------------------------------------------------+ 4 Zeilen im Satz (0,00 Sek.) Exportieren Sie dann die Benutzerberechtigungen über das Skript: #Berechtigungsskript exportieren#!/bin/bash #Funktion exportiert Benutzerrechte pwd=root expgrants () { mysql -B -u'root' -p${pwd} -N $@ -e "SELECT CONCAT( 'SHOW GRANTS FOR ''', Benutzer, '''@''', Host, ''';' ) AS Abfrage FROM mysql.user" | \ mysql -u'root' -p${pwd} $@ | \ sed 's/\(GRANT .*\)/\1;/;s/^\(Grants für .*\)/-- \1 /;/--/{x;p;x;}' } expgrants > /tmp/grants.sql echo "Berechtigungen löschen;" >> /tmp/grants.sql #Ergebnis nach der Ausführung des Skripts-- Berechtigungen zum Lesen@% GRANT SELECT ON *.* TO 'lesen'@'%'; -- Zuschüsse für root@% Gewähren Sie 'root'@'%' alle Privilegien für *.* mit der Gewährungsoption. -- Zuschüsse für test@% GRANT USAGE ON *.* TO 'test'@'%'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW ON `test_db`.* TO 'test'@'%'; -- Zuschüsse für test_user@% GRANT USAGE ON *.* TO 'Testbenutzer'@'%'; GRANT SELECT, INSERT, UPDATE, DELETE ON `test_db`.`t1` TO 'test_user'@'%'; -- Zuschüsse für mysql.session@localhost GRANT SUPER ON *.* TO 'mysql.session'@'localhost'; GRANT SELECT ON `performance_schema`.* TO 'mysql.session'@'localhost'; GRANT SELECT ON `mysql`.`Benutzer` TO 'mysql.session'@'localhost'; -- Berechtigungen für mysql.sys@localhost GRANT USAGE ON *.* TO 'mysql.sys'@'localhost'; GRANT TRIGGER ON `sys`.* TO 'mysql.sys'@'localhost'; GRANT SELECT ON `sys`.`sys_config` TO 'mysql.sys'@'localhost'; 3.mysqlpump exportiert Benutzer direkt mysqlpump ist ein Derivat von mysqldump und ebenfalls ein Tool für logische MySQL-Backups. mysqlpump verfügt über mehr Optionen und kann Anweisungen zum Erstellen von Benutzern und Erteilen von Berechtigungen direkt exportieren. Lassen Sie uns dies demonstrieren: #exclude-databases schließt Datenbanken aus --users gibt Exportbenutzer an exclude-users schließt which users aus #Sie können auch den Parameter --add-drop-user hinzufügen, um eine Drop-User-Anweisung zu generieren #Wenn für die Datenbank GTID aktiviert ist, müssen Sie beim Exportieren --set-gtid-purged=OFF hinzufügen mysqlpump -uroot -proot --exclude-databases=% --users --exclude-users=mysql.session,mysql.sys > /tmp/user.sql #Ergebnisse exportieren – Dump erstellt durch MySQL Pump Utility, Version: 5.7.23, linux-glibc2.12 (x86_64) -- Dump-Startzeit: Freitag, 19. April 2019, 15:03:02 Uhr -- Serverversion: 5.7.23 SETZEN Sie @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SETZEN Sie @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SETZEN Sie @OLD_SQL_MODE=@@SQL_MODE; SETZEN Sie SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SETZEN Sie @@SESSION.SQL_LOG_BIN= 0; SETZEN Sie @OLD_TIME_ZONE=@@TIME_ZONE; ZEITZONE EINSTELLEN='+00:00'; SETZEN Sie @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT; SETZEN SIE @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS; SETZEN SIE @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION; Namen festlegen utf8mb4; ERSTELLEN SIE BENUTZER 'read'@'%' IDENTIFIZIERT MIT 'mysql_native_password' ALS '*2158DEFBE7B6FC24585930DF63794A2A44F22736'. KEIN PASSWORT ERFORDERLICH. LÄUFT AB. STANDARDKONTO ENTSPERREN. GRANT SELECT ON *.* TO 'lesen'@'%'; ERSTELLEN SIE BENUTZER 'root'@'%' IDENTIFIZIERT MIT 'mysql_native_password' ALS '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B'. KEIN PASSWORT ERFORDERLICH. LÄUFT AB. STANDARDKONTO ENTSPERREN. Gewähren Sie 'root'@'%' alle Privilegien für *.* mit der Gewährungsoption. ERSTELLEN SIE BENUTZER 'test'@'%' IDENTIFIZIERT MIT 'mysql_native_password' ALS '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'. KEIN PASSWORT ERFORDERLICH. LÄUFT AB. STANDARDKONTO ENTSPERREN. GRANT USAGE ON *.* TO 'test'@'%'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW ON `test_db`.* TO 'test'@'%'; ERSTELLEN SIE BENUTZER 'test_user'@'%' IDENTIFIZIERT MIT 'mysql_native_password' ALS '*8A447777509932F0ED07ADB033562027D95A0F17'. KEIN PASSWORT ERFORDERLICH. LÄUFT AB. STANDARDKONTO ENTSPERREN. GRANT USAGE ON *.* TO 'Testbenutzer'@'%'; GRANT SELECT, INSERT, UPDATE, DELETE ON `test_db`.`t1` TO 'test_user'@'%'; SETZE ZEITZONE=@ALTE_ZEITZONE; SETZE CHARACTER_SET_CLIENT=@ALTER_CHARACTER_SET_CLIENT; SETZEN SIE CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS; SETZEN SIE COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION; SETZEN SIE FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SETZEN SIE UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; SETZEN SIE SQL_MODE=@OLD_SQL_MODE; -- Dump-Endzeit: Fr., 19. April 2019, 15:03:02 #Es ist ersichtlich, dass die Exportergebnisse nur Anweisungen zum Erstellen von Benutzern und Erteilen von Berechtigungen enthalten, was sehr nützlich ist. #Detaillierte Informationen zur Verwendung von mysqlpump finden Sie unter: https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html Zusammenfassen: Dieser Artikel stellt drei Lösungen zum Exportieren von Datenbankbenutzerinformationen vor. Jede Lösung wird mit einem Skript versehen und demonstriert. Gleichzeitig können diese drei Lösungen leicht gekapselt und als Skripte zum Sichern von Datenbank-Benutzerberechtigungen verwendet werden. Vielleicht hast du andere Lösungen, wie pt-show-grants usw. Du kannst sie gerne weitergeben. Du kannst sie auch gerne sammeln oder in Skripte umwandeln, die für dich besser geeignet sind. Man weiß nie, wann man sie brauchen wird. Besonders wenn viele Benutzer auf einer Instanz sind, wirst du feststellen, dass das Skript nützlicher ist. Oben finden Sie detaillierte Informationen zum eleganten Sichern von MySQL-Konten. Weitere Informationen zu MySQL-Sicherungskonten finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung verschiedener Möglichkeiten zur Installation von CMake unter Ubuntu
>>: Tab-Effekte mit JS schreiben
Vor Kurzem bereitete sich das Unternehmen auf die...
1. Grammatik Standort [=|~|~*|^~|@] /uri/ { ... }...
Zunächst einmal hängt die Gestaltung des Webseiten...
1 Einleitung Beim Gestalten einer Datenbank ist e...
1. Installieren Sie xshell6 2. Stellen Sie eine S...
Das folgende Skript wird für die geplante Sicheru...
1. Konstruktion 1. Bereiten Sie die Datei htpassw...
Frage Beim Ausführen von gdb im Docker wird ein H...
Vorwort Erfahren Sie, wie Sie auf Ihrem System ei...
Vorwort Für das Projekt ist ein kreisförmiges Men...
Das sogenannte dreispaltige adaptive Layout bedeu...
MySQL ist eine Datenbank, die mir sehr gefällt. H...
Inhaltsverzeichnis Vorwort Was ist ein Filter So ...
Als Softwareentwickler müssen Sie über ein vollst...
Ziel dieses Artikels ist es, die Beziehung zwisch...