Постановка задачи
mysqldump --add-drop-database --all-database
создает дамп, который содержит
....
/*!40000 DROP DATABASE IF EXISTS `mysql`*/;
....
Это ожидаемо, и я считаю, что это правильное поведение.
Тем не менее, если перенести этот дамп на сервер MySQL, например cat dump | mysql -u root -pxxxx
(учетная запись имеет SUPER), он жалуетсяERROR 3552 (HY000) at line 30: Access to system schema 'mysql' is rejected.
Вопрос
Есть ли способ заставить это работать, не редактируя дамп вручную. Или sed/grep для удаления проблемной строки — это единственный выход?
Раньше это работало в MySQL 5.6 (т.е. допускало удаление базы данных MySQL)
Учетная запись root имеет следующие привилегии:SELECT, 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
Сервер и клиент: MySQL 8.0.12
решение1
Я думаю, что нет необходимости сбрасывать/восстанавливать mysql
схему базы данных.
Если вам нужен автоматизированный метод, который пропускает mysql
базу данных (или любую другую базу данных, которую вынехотите сделать дамп) без указания каждой отдельной базы данных, проверьте ответ наэтот вопросдля простого скрипта для автоматического получения всех баз данных, кроме тех, которые вы хотите игнорировать.