Conectando SQL Server 2005 con MySQL

Escenario

Les planteo el siguiente escenario. Tengo un servidor principal con SQL Server 2005 como manejador de base de datos. Adicionalmente, tengo instalado en otras PC's "terminales" un sistema que corre, de manera local, conectado a una base de datos MySQL instalada en dicho terminal. ¿Porque no en red? Porque quiero que este siga funcionando independientemente si "se va" la red, existe un tráfico excesivo o decenas de problemas extras que pueden ocurrir en una aplicación "en línea". El punto central del problema es el siguiente ¿Como hago para pasar toda esa información capturada en los terminales en la base de datos MySQL y trasladarla a mi servidor central con el SQL Server 2005?. A primera idea una solución. Programar una aplicación que acceda a la base Mysql, lea los datos y los inserte mediante consultas SQL en el servidor central con SQL 2005. Pero, ¿Debe existir una solución mas sencilla, rápida y elegante? Ese es el tema del que trataremos esta vez. Este se llama servidores vinculados en SQL Server 2005.

¿Se capto la idea?

Quiero pasar datos de Mysql a SQL 2005.

¿Que es servidores vinculados?


El mismo nombre es bastante descriptivo. Añado una base de datos externa al SQL 2005 y la hago accesible, entiéndase puedo aplicar sobre ella consultas SQL como insert's, update's o delete's.

¿Como lo hago?


Paso 1 : Instalando los drivers de MySQL ODBC que me permita manejar la base Mysql.


Ubicación : En el servidor central donde esta la base SQL Server 2005

Debes bajar el Conector ODBC para MySQL de la siguiente web :

http://dev.mysql.com/downloads/connector/odbc/

Descarga el que se ajuste a tu Windows, ya se da 32 o 64 bits. Solo hay que instalarlo, lo cuál no representa mayor problema ya que es la típica instalación "siguiente-siguiente".


Paso 2 : Creando el ODBC y configurando para que apunte al servidor Mysql y a la base a manipular.


Ubicación : En el servidor central donde esta la base SQL Server 2005

Entra al "Panel de Control" y busca "Herramientas Administrativas". Entra en este y aparecerá "Orígenes de datos ODBC".
Se abrirá la siguiente ventana. Busca el botón "Agregar".


Clic sobre Mysql ODBC 3.51 driver (que es lo que instalaste en el paso 1). Luego sobre finalizar.


Se abrirá el conector ODBC del MySQL. En este debes definir los parámetros de conexión a tu base de datos MySQL. Simplemente agrega el nombre de tu servidor, tu user y password. No olvides colocar el nombre de la conexión (Data Source Name). Lo vamos a usar en el Paso 3. Sugiero "MySQL_LINK".




Paso 3 : Vinculando el servidor Mysql con SQL Server 2005


Ubicación : En el servidor central donde esta la base SQL Server 2005

Entramos al administrador coorporativo del SQL Server 2005 y buscamos la opción "Objetos del servidor". Dentro existe una subcarpeta llamada "Servidores vinculados".

Hacemos clic derecho sobre Servidores vinculados y buscamos la opción "Nuevo servidor vinculado".

Se abrirá la ventana "Nuevo servidor vinculado" donde debes colocar los parametros para conectarse con la base MySQL.

Marcas la opción "Otro origen de datos" . Deberás colocar los siguientes parámetros.

Servidor vinculado : LINKED_MYSQL (coloca el nombre que desees)

Proveedor : Microsoft OLE DB Provider for ODBC Drivers.

Nombre del Producto : MySQL

Origen de datos : MySQL_LINK (Ojo: Este es el nombre del ODBC que creaste en el paso 2, colocale el que tu hayas colocado.)

Cadena de proveedor : ODBC:DSN=MySQL_LINK::Table=aaa (el valor aaa es una tabla de la base MySQL, coloca cualquiera de las tablas de tu base. DSN es el nombre del ODBC que creaste en el paso 2)

Catálogo : pyp1 (nombre de la base de datos a la cuál quieras conectarte)


Dentro de la misma ventana, clic en la ficha "Seguridad" para que establecer con que user y password nos vamos a conectar. Clic en "Se establecerán usando este contexto de seguridad" y colocamos el user y password. Luego clic en el botón "Aceptar". Eso es todo, ya tenemos vinculado nuestro servidor MySQL con SQL 2005.



Paso 4 : Probando consultas SQL en el servidor vinculado.

Ubicación : En el servidor central donde esta la base SQL Server 2005

Vayamos a probar si podemos hacer consultas en MySQL.

Ejecutamos exec sp_Tables_Ex 'LINKED_MYSQL' (Devolvemos información acerca de las tablas de el servidor que hemos vinculado.LINKED_MYSQL es el nombre del servidor vinculado que hemos creado). Se deben mostrar las tablas del servidor vinculado.

Veamos algunos ejemplos de sentencias SQL con openquery.

¿Si quiero mostrar datos de las tablas?

select * from openquery (LINKED_MYSQL,'select * from aaa')

¿Si quiere eliminar los datos de un tabla?

Delete openquery (LINKED_MYSQL,'select * from aaa'). ¡Borramos todos los datos de la tabla 'aaa'!

¿Si quiero insertar datos en dicha tabla?

insert into openquery(LINKED_MYSQL,'select * FROM aaa')
(Field1, Field2,...)
SELECT Field1, Field2,...
FROM Tabla


¿Y para actualizar datos?

Update openquery(LINKED_MYSQL,'Select * from aaa') SET Cod_Ind = 7
WHERE Cod_Ind = 7.5

Para terminar en este post existe más ejemplos de sentencias SQL con OpenQuery y servidor vinculados. Es un gran post con bastantes ejemplos, me ayudo en mi trabajo así que se los recomiendo :

http://www.forosdelweb.com/f21/como-hacer-insert-liskserver-por-openquery-238208/

Espero que este tema ayude a muchos que como yo están en busca de una forma segura y sencilla de conectar Mysql con SQL Server.




Saludos.

Alberto Peves M.

9 comentarios:

Vinicio dijo...

Gracias por conpartir tus conocimientos, es justo lo que buscaba.

Anónimo dijo...

hola que tal muy buen aporte, solo que a mi me aparece esto al querer hacer la consulta o ejecutar el procedimiento.

Mens. 7411, Nivel 16, Estado 1, Línea 1
El servidor 'MYSQL' no está configurado para DATA ACCESS.

Edward dijo...

Me aparece el siguiente error: "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified". (Microsoft SQL Server, Error: 7303)

Aún no encuentro solución, ¿alguna idea?

Anónimo dijo...

Super!!! funciona muyy bien, es lo que estaba buscando...

Anónimo dijo...

Barbaro!!!!!!!
Excelente me funciona bien.
GRACIAS!!!!

Carlos Alarcon dijo...

Y para realizar una consulta en la otra direccion como podria hacerlo ?

Dario Gutierrez dijo...

Muy buena ayuda, estaba buscando algo asi,
Lo unico que al realizar la consulta no la resuelve, no da error simplemente queda resolviendo. tenes alguna idea de que puede estar faltando. ah mi conexion es entre dos servers uno con sql2005 windows y un linux con mysql... espero puedas seguir ayudando muchas gracias.

Anónimo dijo...

una máquina!!!!

10 minutos y me has solucionado el problema de semanas!

Muchas gracias crack!

Edu

Blogger dijo...

Bluehost is ultimately the best web-hosting provider with plans for any hosting requirments.