Replicar una base de datos remota de MySQL a MS SQL Server 2008

10

Quiero replicar el contenido de una base de datos MySQL a una base de datos MS SQL Server 2008.

es posible? ¿Alguien puede describir los pasos necesarios para lograr esto?

Gracias.

Jimmy Collins
fuente

Respuestas:

9

Personalmente, me acercaría al método MS SQL frente al empuje del método MySQL. ¿Por qué? Bueno, Windows tiene controladores ODBC MySQL de 32 bits y 64 bits listos para usar y la configuración de un servidor vinculado es trivial. Tengo muchos servidores MySQL vinculados desde MS SQL. Además, conectarse a MS SQL desde Linux / Unix no siempre es excelente y, por lo general, no puede usar todas las funciones. FreeTDS tiene limitaciones; puede golpearlos más temprano que tarde, así que ¿por qué no simplemente omitirlo? Todo esto supone que está ejecutando MySQL en * nix. Si no, se acerca un poco a 50/50, pero aún así elegiría sacar de MS SQL, ya que parece que no es la base de datos "en vivo", por lo que poner la carga sobre cualquier ETL o procesamiento es más ideal. La solución GoldenGate suena interesante, pero estoy seguro de que no es gratuita.

Teniendo en cuenta que he configurado este tipo de escenario con las bases de datos MySQL y Oracle que se replican en MS SQL, proporcionaré algunos consejos que me han funcionado mejor:

  1. Si puede, haga todo lo posible para determinar cómo puede asegurarse de que solo está realizando cambios delta. Combinar comandos puede ayudar con esto. Truncar una tabla y luego volver a insertarla vuelve a llenar el registro, usa el ancho de banda de la red y, en general, desperdicia tiempo.
  2. Si se trata de muchos datos, asegúrese de dividir las transacciones para no requerir un archivo de registro masivo. Use confirmaciones o puntos de control explícitos cuando haya alcanzado un paso del que sabe que no tendrá que retroceder.
  3. Si la base de datos MSSQL será solo para informes, trabaje ETL allí para no afectar el servidor MySQL. Use una base de datos provisional o un esquema + grupo de archivos para facilitar las cosas.
  4. Divide la importación de datos en pasos. Esto facilita reiniciar la importación donde falló y / o solucionar problemas. Un enfoque de todo o nada se vuelve molesto rápidamente.
  5. Utilice variables siempre que sea posible para ayudar a la base de datos remota con planes de consulta y uso de índices. También preste atención a qué tipo de aislamiento de transacción se encuentra en el cuadro de host y qué impacto tendrán las consultas de "replicación". No desea bloquear escritores en una base de datos en vivo si solo está extrayendo datos para informes o uso de sandbox.

Espero que los consejos ayuden!

AndrewSQL
fuente
4

La misma pregunta se abordó en StackOverflow aquí: replicación de MySQL a MSSQL .

Parece que hay algunas soluciones, pero no es una solución muy fácil.

Creo que definitivamente debería intentar crear un paquete SSIS para importar los datos necesarios de MySQL DB a MSSQL DB. SSIS le permite a uno importar datos de varias fuentes. Entonces debería poder programar el paquete usando el programador de tareas de Windows o los trabajos sql.

Mariana
fuente
3

Si por replicación te refieres al envío de registros o algo así, creo que no tienes suerte. Sin embargo, ciertamente puede configurar una base de datos MySQL como un servidor vinculado y ejecutar su propio esquema de replicación. Lo más simple es hacer instantáneas periódicas de todas las tablas usando declaraciones truncadas e insertadas. Agregue complejidad según sus requisitos.

Larry Smithmier
fuente
Quiero decir que quiero que se ejecute una tarea programada y copie todo el contenido del msqldb al servidor sql 2008 db una vez por semana más o menos, ¿es eso posible?
Jimmy Collins el
1
Recuerde que truncar y extraer todos los datos cada vez puede ser muy lento dependiendo de la cantidad de datos involucrados, la latencia de la red, etc. Definitivamente no es el camino a seguir si tiene enlaces de red pequeños o lentos entre las dos bases de datos. Siempre trato de idear un método que me permita extraer deltas.
AndrewSQL
1
Estoy de acuerdo, los deltas son el camino a seguir. No conozco suficiente MySQL para hablar con disparadores y bits de fila sucios, pero estoy seguro de que se podría configurar algo. En el lado de SQL Server, programar un trabajo es sencillo.
Larry Smithmier
3

Puede usar GoldenGate para MySQL y MS SQL para hacer esto. Simplemente instale el producto GoldenGate en cada lado, luego proceda como para una replicación homogénea.

Alternativamente, para una replicación de "instantánea", puede usar un script Python (o similar) para simplemente conectarse a ambas fuentes de datos (usando UnixODBC y FreeTDS para conectarse a MS SQL), recorrer las tablas SELECTen un lado, para cada fila INSERTen el otro. Como MSSQL tiene transacciones y es su objetivo, puede comenzar una transacción, DELETEtodo desde todas las tablas, hacer la copia, COMMITy aparecerá instantáneamente en lo que respecta a los usuarios conectados en el objetivo, no habrá inconsistencias (a menos que existan) en la fuente, por supuesto).

Gayo
fuente
No sabía que esto era algo que podrías hacer con GoldenDate. Tendré que leer más sobre esto; ¡gracias por compartir!
AndrewSQL
Ahora Oracle brinda soporte para este producto. Oracle ha adquirido GoldenGate. Ahora este producto está bajo productos Oracle.