6

我正在尝试使用如下查询将一些数据从我的生产数据库移植到我的沙箱:

INSERT `dbsandbox`.`SomeTable`(Field1, Field2, Field3)
SELECT t.Field1, t.Field2, t.Field3
FROM `dbprod`.`SomeTable` t;

当我尝试此跨数据库连接时,出现以下错误:

错误 1142 (42000): SELECT 命令拒绝用户 'myusername'@'server.domain.tdl' 用于表 'SomeTable'

有问题的用户对两个数据库的有问题的表都有权限。我在 unix mysql 客户端和 windows MySQL Query Browser 应用程序中都尝试过,结果相同。

我错过了什么?

4

2 回答 2

9

事实证明这是一个权限问题。源数据库需要我使用的用户名的密码才能访问任何表。目标只要求用户名在本地主机上。

即使我每次在跨数据库查询的上下文中使用密码启动 MySQL 客户端,也会尝试另一个连接。此连接不记得我最初使用密码对客户端进行身份验证,因此从沙箱连接到生产数据库失败。显然,显式声明表的数据库名称有时也意味着需要另一个连接。

答案是从生产数据库启动查询,引用没有数据库限定符的本地表,然后插入沙盒数据库表。这次它奏效了:

使用数据库产品

插入dbsandboxSomeTable(Field1, Field2, Field3) SELECT t.Field1, t.Field2, t.Field3 FROM SomeTablet;

于 2008-12-11T18:59:02.853 回答
6

听起来像是权限问题。通常,用户权限是以数据库方式在数据库上设置的,因此目标用户无权访问源。

首先确保您可以从源数据库中进行选择。

SELECT t.Field1, t.Field2, t.Field3
FROM `dbprod`.`SomeTable` t;

那样有用吗?如果没有,那么您需要授予用户对源数据库的选择权限。

两个数据库都在/在同一台服务器上,对吗?

于 2008-12-03T18:52:15.837 回答