2011-08-15 27 views
9

Estoy tratando de transferir datos masivos de forma constante y continua desde una base de datos SQL Server a una base de datos MYSQL. Quería usar la replicación de SSMS de SQL Server, pero aparentemente solo es para SQL Server a Oracle o conexión de IBM DB2. Actualmente estamos utilizando SSIS para transformar datos y llevarlos a una ubicación temporal en la base de datos MYSQL donde se copian. Me gustaría la forma más rápida de transferir datos y soy una complicación de varios métodos.Transferencia de datos de SQL Server a MySQL

que tienen una nueva forma de planeo en la transformación de los datos que estoy seguro va a resolver la mayoría de problemas de tiempo, pero quiero para asegurarse de que no se enfrenten a problemas de tiempo en el futuro. He configurado un servidor vinculado que usa un controlador ODBC MYSQL para hablar entre SQL Server y MYSQL. Esto parece MUY lento. Tengo un código que también usa el controlador ODBC de Microsoft, pero se usa tan poco que no puedo medir el rendimiento. ¿Alguien sabe de aligerar maneras rápidas de comunicarse entre estas dos bases de datos? He estado investigando los proveedores de datos de MYSQL que parecen comunicarse con una capa OleDB. No estoy muy seguro de qué creer y qué camino seguir, ¿alguna idea?

Respuesta

1

que utiliza el puente JDBC-ODBC en Java para hacer precisamente esto en el pasado, pero el rendimiento a través de ODBC no es muy grande. Yo sugeriría que mira algo como http://jtds.sourceforge.net/ que es un controlador Java puro que se puede soltar en un simple script Groovy como la siguiente:

import groovy.sql.Sql 
sql = Sql.newInstance('jdbc:jtds:sqlserver://serverName/dbName-CLASS;domain=domainName',  
'username', 'password', 'net.sourceforge.jtds.jdbc.Driver') 
sql.eachRow('select * from tableName') { 
    println "$it.id -- ${it.firstName} --" 
    // probably write to mysql connection here or write to file, compress, transfer, load 
} 

Los siguientes números de rendimiento que dan una idea de cómo se podría llevar a cabo: http://jtds.sourceforge.net/benchTest.html

Usted puede encontrar algunas ventajas de rendimiento para volcar los datos a un archivo de volcado de MySQL forma y con loaddata mysql en lugar de escribir fila por fila. MySQL tiene algunas mejoras significativas en el rendimiento para grandes conjuntos de datos si carga los archivos de "infile" y cosas como los intercambios de tablas atómicas.

Utilizamos algo como esto para cargar rápidamente archivos de datos grandes en mysql de un sistema a otro, p. Este es el mecanismo más rápido para cargar datos en mysql. Pero el tiempo real fila por fila podría ser un simple bucle para hacer en groovy + alguna tabla para hacer un seguimiento de qué fila se había movido.

mysql>

select * from table into outfile 'tablename.dat'; 
myisamchk --keys-used=0 -rq '/data/mysql/schema_name/tablename' 
load data infile 'tablename.dat' into table tablename; 
myisamchk -rq /data/mysql/schema_name/tablename 
flush tables; 
exit; 

rm 'tablename.dat

1

La mejor manera que he encontrado para transferir datos SQL (si tiene espacio) es un volcado de SQL en un idioma y luego usar una herramienta de software de conversión (o guión perl, ambos prevalecen) para convertir SQL volcado de MSSQL a MySQL. Vea mi respuesta a this pregunta sobre qué convertidor le puede interesar :).

0

Hemos utilizado el controlador ado.net para mysql en ssis con bastante éxito. Básicamente, instale el controlador en la máquina con los servicios de integración instalados, reinicie las ofertas, y debería aparecer en la lista de controladores cuando crea un administrador de conexión ado.net.

En cuanto a la replicación, ¿qué es exactamente lo que estás tratando de lograr?

Si va a supervisar los cambios, lo tratan como un tipo 1 cambiando lentamente dimensión (terminología de almacenamiento de datos, sino que se aplica mismo principio). Inserte nuevos registros, actualice los registros modificados.

Si sólo está interesado en nuevos registros y no tienen planes para actualizar los datos previamente cargados, intentar una estrategia de carga incremental. Inserte registros donde source.id> max (destination.id).

Después de probar el paquete, programar un trabajo en el agente de SQL Server para ejecutar el paquete cada x minutos.

0

Cou también puede intentar lo siguiente. http://kofler.info/english/mssql2mysql/

Probé esto un tiempo más largo antes y funcionó para mí. Pero no te lo recomendaría. ¿Cuál es el problema real, qué intenta hacer? ¿No obtiene una conexión de base de datos MSSQL, por ejemplo de Linux?

Cuestiones relacionadas