Команда CREATE запрещена для пользователя, имеющего GRANT ALL PRIVILEGES
Я пытаюсь настроить подчиненное устройство репликации MySQL, и мне очень тяжело LOAD DATA FROM MASTER;
, Да, я знаю, что это устарело, но я использую MySQL 5.1, и в данный момент это не моя проблема.
По какой-то причине MySQL продолжает говорить мне CREATE
команда отклонена, но проверка SHOW GRANTS говорит об обратном. Проверь это:
mysql> SHOW GRANTS;
+--------------------------------------------------------------------------------------------------------------------+
| Grants for replicator@% |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'replicator'@'%' IDENTIFIED BY PASSWORD '*ABCDEFABCDEFABCDEFABCDEFBLAHBLAHBLAHBLAH' |
+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> LOAD DATA FROM MASTER;
ERROR 1142 (42000): CREATE command denied to user 'replicator'@'localhost' for table 'aggregate'
mysql>
То, что я подумал, было странно, что при звонке LOAD DATA FROM MASTER
думает, что я 'replicator'@'localhost'
, еще SHOW GRANTS
говорит 'replicator'@'%'
, Просто чтобы быть в безопасности, я дал те же самые привилегии 'replicator'@'localhost'
также.
mysql> SHOW GRANTS FOR 'replicator'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------+
| Grants for replicator@localhost |
+----------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'replicator'@'localhost' IDENTIFIED BY PASSWORD '*ABCDEFABCDEFABCDEFABCDEFBLAHBLAHBLAHBLAH' |
+----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Итак, какие-нибудь мысли о том, почему все это испорчено? Да, я сделал FLUSH PRIVILEGES
также много раз.
Заранее спасибо за любой совет, который вы можете дать.
4 ответа
Я хотел бы предложить следующее:
При следующем входе в систему выполните этот запрос:
SELECT USER(),CURRENT_USER();
Если вы видите два разных имени пользователя, у вас есть странный сценарий
Это вы можете найти в учебном руководстве по сертификации MySQL 5.0 (ISBN 0-672-32812-7), глава 34 или 35
USER()
повторяет то, что вы пытались войти как
CURRENT_USER()
echos what mysql позволил вам войти как.
Попробуйте подключиться, используя репликатор, используя 127.0.0.1, и выполните тот же запрос.
Вы также можете убедиться, что в mysql.user присутствуют все необходимые столбцы для версии mysql, которую вы используете. Если вы не обновили таблицу mysql.user (с перехода с MySQL 4 - MySQL 5 или MySQL 5.0 на 5.1), столбцы в mysql.user могут быть не синхронизированы.
Для будущих поисковиков я обнаружил, что получаю эту ошибку при использовании комбинации MySQL Workbench и phpMyAdmin: если вы "копируете SQL" из списка таблиц, он добавляет имя схемы к именам таблиц в операторе create (и в команды внешнего ключа, которые могут быть его частью).
Тщательное удаление имени схемы помогло мне решить эту проблему.
Например:
CREATE TABLE IF NOT EXISTS `schema`.`table1` (
...blah blah blah...
CONSTRAINT `fk_user_id`
FOREIGN KEY (`user_id` )
REFERENCES `schema`.`table1` (`id` )
...blah blah blah...
следует изменить на:
CREATE TABLE IF NOT EXISTS `table1` (
...blah blah blah...
CONSTRAINT `fk_user_id`
FOREIGN KEY (`user_id` )
REFERENCES `table1` (`id` )
...blah blah blah...
Как ни странно, просто ВЫЙТИ из клиента и восстановив соединение, решите проблему! Очевидно, FLUSH PRIVILEGES
недостаточно.
Я хотел бы услышать любые комментарии, если у вас есть их, почему это так. Я всегда слышал, что FLUSH PRIVILEGES
сделаю именно это. Может ли это иметь какое-то отношение ко мне, первоначально входя в систему как 'replicator'@'%'
а затем, создавая 'replicator'@'localhost'
учетная запись?
В любом случае, если у вас есть странные проблемы с разрешениями, подобные этой, я думаю, стоит попытаться повторно подключить клиент.
При использовании MySQL Workbench Migration Wizard для копирования БД с одного сервера на другой мне было выдано то же сообщение об ошибке, поскольку новое имя БД не совпадало с исходным. Новый сервер автоматически размещает свое доменное имя перед всеми именами БД, создавая несоответствие в именах. Поэтому при переносе БД xyz
на новый сервер domain
это называется новая БД domain_xyz
и вышеупомянутое сообщение об ошибке происходило для каждого создания таблицы.
Чтобы решить эту проблему, я вручную отредактировал новое имя БД после создания схемы миграции, изменив его с xyz
в doman_xyz
,
Подсказка к ответу Кэмвин, который заставил меня взглянуть в этом направлении.