2008-12-03 23 views
5

estoy tratando de puerto de algunos datos a través de mi base de datos de producción a mi caja de arena utilizando una consulta como esta:¿Cómo habilito las combinaciones entre bases de datos en mysql?

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

Cuando intento esto entre bases de datos se unen me sale el siguiente error:

ERROR 1142 (42000): comando SELECT denegado al usuario 'myusername'@'server.domain.tdl' para la tabla 'SomeTable'

El usuario en cuestión tiene permiso para las tablas en cuestión para ambas bases de datos. Lo he intentado tanto en el cliente mysql de Unix como en la aplicación Windows MySQL Query Browser con el mismo resultado.

¿Qué me estoy perdiendo?

Respuesta

8

Resulta que era un problema de permisos. La base de datos de origen requería una contraseña para el nombre de usuario que estaba usando para acceder a cualquier tabla. El objetivo solo requiere que el nombre de usuario esté en el host local.

A pesar de que inicie el cliente de MySQL usando una contraseña cada vez que en el contexto de una consulta entre bases de datos que se intente otra conexión. Esta conexión no recuerda que originalmente me autenticé contra el cliente con una contraseña, por lo que falló la conexión desde la zona de pruebas a la base de datos de producción. Al parecer, declarar explícitamente el nombre de la base de datos para una tabla a veces implica la necesidad de otra conexión también.

La respuesta fue iniciar la consulta de la base de datos de producción, consulte las tablas locales sin el calificador de base de datos, a continuación, insertar a través de las tablas de base de caja de arena. Esta vez funcionó:

USO dbprod

INSERT dbsandbox. SomeTable (Campo1, Campo2, Field3) SELECT t.Field1, t.Field2, t.Field3 DE SomeTable t;

4

Parece un problema de permisos. A menudo, los permisos de los usuarios se configuran en una base de datos en forma de base de datos, por lo que el usuario del destino no tiene acceso a la fuente.

primer lugar, asegúrese de que puede hacer lo selecto de la base de datos fuente.

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

¿Eso funciona? De lo contrario, debe otorgar al usuario los permisos de selección en la base de datos fuente.

Ambas bases de datos están en/en el mismo derecho servidor?

+0

Sí, ambas bases de datos están en el mismo servidor. La instrucción select funciona, independientemente de si se emite mientras se usa dbprod o dbsandbox. – Chris

+0

¿Obtiene el mismo error sin el INSERTO? – dkretz

+0

No. Si solo hago SELECCIONAR, entonces no obtengo ningún error. – Chris

Cuestiones relacionadas