mysqldump --add-drop-database --all-database
создает дамп, содержащий
....
/*!40000 DROP DATABASE IF EXISTS `mysql`*/;
....
Это ожидается, и я считаю, что это правильное поведение.
Тем не менее, если поместить этот дамп на сервер mysql, т.е. cat dump | mysql -u root -pxxxx
(На аккаунте СУПЕР) жалуется 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
Думаю не надо дамп / восстанавливать mysql
схема базы данных.
Если вам нужен автоматический метод, который пропускает mysql
база данных (или любая другая база данных, которую вы не хотите сбросить), не указывая каждую базу данных, проверьте ответ на этот вопрос для простого скрипта для автоматического получения всех баз данных, кроме тех, которые вы хотите игнорировать.