13

我正在尝试设置 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

4 回答 4

19

对于未来的搜索者,我发现在使用 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...
于 2013-01-30T07:59:27.737 回答
13

我想提出以下建议:

下次登录时运行此查询:

SELECT USER(),CURRENT_USER();

如果你看到两个不同的用户名,你有一个奇怪的场景

您可以在 MySQL 5.0 认证学习指南 (ISBN 0-672-32812-7) 第 34 或 35 章中找到这一点

USER()呼应您尝试登录的内容

CURRENT_USER()回显 mysql 允许您登录的内容。

尝试使用 127.0.0.1 作为复制器连接并运行相同的查询。

您可能还想确保所有必要的列都存在于您正在使用的 mysql 版本的 mysql.user 中。如果您没有升级 mysql.user 表(从 MySQL 4 - MySQL 5 或 MySQL 5.0 到 5.1 的迁移),则 mysql.user 中的列可能不同步。

于 2011-03-10T05:31:07.783 回答
5

奇怪的是,只需退出客户端并重新连接即可解决问题!显然,FLUSH PRIVILEGES还不够。

如果您有任何意见,我想听听为什么会这样。我一直听说那FLUSH PRIVILEGES会做到这一点。这可能与我最初登录'replicator'@'%'然后创建'replicator'@'localhost'帐户有关吗?

无论如何,如果您有类似这样的奇怪权限问题,我想值得尝试重新连接客户端。

于 2011-03-10T02:03:06.600 回答
1

When using MySQL Workbench Migration Wizard to copy a DB from one server to another, I was presented with the same error message because the new DB name did not match the original one. The new server automatically places its domain name in front of all DB names creating a mismatch in names. Therefore when transferring DB xyz to the new server domain, it called the new DB domain_xyz and the above error message occurred for every table creation.

To fix the problem, I manually edited the new DB name after the migration schema was generated, changing it from xyz to doman_xyz.

Tip-of-the-hat to Camwyn's response that got me looking in this direction.

于 2015-03-12T16:11:22.293 回答