2008-12-03 2 views
5

Я над пытаясь порт некоторые данные из моей производственной базы в моей песочнице, используя запрос, как это:Как включить объединение кросс-баз данных в mysql?

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 с тем же результатом.

Что мне не хватает?

ответ

8

Оказалось, что это проблема с разрешениями. В исходной базе данных был запрошен пароль для имени пользователя, которое я использовал для доступа к любым таблицам. Цель только требовала, чтобы имя пользователя находилось на локальном хосте.

Несмотря на то, что я запускаю клиент MySQL с использованием пароля каждый раз в контексте запроса кросс-базы данных, выполняется попытка другого соединения. Это соединение не помнит, что я первоначально аутентифицировался против клиента с паролем, поэтому соединение с песочницей в производственной базе данных не удалось. Очевидно, что прямое указание имени базы данных для таблицы иногда подразумевает необходимость в другом соединении.

Ответ должен был инициировать запрос из производственной базы данных, обращаться к локальным таблицам без квалификатора базы данных, а затем вставлять их в таблицы базы данных песочницы. На этот раз он работал:

USE dbprod

ВСТАВИТЬ dbsandbox. SomeTable (Field1, Field2, Field3) SELECT t.Field1, t.Field2, t.Field3 FROM SomeTable t;

4

Это звучит как проблема с разрешениями. Часто пользовательские разрешения настраиваются в базе данных в режиме базы данных, поэтому пользователь для адресата не имеет доступа к источнику.

Сначала убедитесь, что вы можете сделать выбор из исходной базы данных.

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

Это работает? Если нет, то вам необходимо предоставить разрешения на выбор пользователя для источника db.

Обе базы данных находятся на одном и том же сервере справа?

+0

Да, обе базы данных находятся на одном сервере. Оператор select работает независимо от того, выпущен ли он при использовании dbprod или dbsandbox. – Chris 2008-12-03 19:14:07

Смежные вопросы