Problemstellung
mysqldump --add-drop-database --all-database
erstellt einen Dump, der enthält
....
/*!40000 DROP DATABASE IF EXISTS `mysql`*/;
....
Das ist erwartungsgemäß und meiner Meinung nach ein korrektes Verhalten.
Wenn dieser Dump jedoch in einen MySQL-Server übertragen wird cat dump | mysql -u root -pxxxx
(das Konto hat SUPER), beschwert er sichERROR 3552 (HY000) at line 30: Access to system schema 'mysql' is rejected.
Frage
Gibt es eine Möglichkeit, es zum Laufen zu bringen, ohne den Dump manuell zu bearbeiten? Oder ist sed/grep zum Entfernen der fehlerhaften Zeile meine einzige Wahl?
Dies funktionierte früher in MySQL 5.6 (d. h. es akzeptierte das Löschen der MySQL-Datenbank).
Der Root-Account hat folgende RechteSELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE, BACKUP_ADMIN, RESOURCE_GROUP_ADMIN, XA_RECOVER_ADMIN
Server und Client: MySQL 8.0.12
Antwort1
Ich denke, es besteht keine Notwendigkeit, das mysql
Datenbankschema zu sichern/wiederherzustellen.
Wenn Sie eine automatisierte Methode wünschen, die die mysql
Datenbank (oder jede andere Datenbank, die Sienichtmöchten), ohne jede einzelne Datenbank anzugeben, überprüfen Sie die Antwort aufdiese Fragefür ein einfaches Skript, um automatisch alle Datenbanken abzurufen, außer denen, die Sie ignorieren möchten.