sql >> Base de Datos >  >> RDS >> Mysql

Transferencia de datos de SQL Server a MySQL

Usé el puente jdbc-odbc en Java para hacer precisamente esto en el pasado, pero el rendimiento a través de ODBC no es muy bueno. Yo sugeriría mirar algo como http://jtds.sourceforge.net/ que es un controlador Java puro que puede colocar en un script Groovy simple como el 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 le dan una idea de cómo podría funcionar:http://jtds.sourceforge.net /benchTest.html

Puede encontrar algunas ventajas de rendimiento al volcar datos en un formato de archivo de volcado mysql y usar mysql loaddata en lugar de escribir fila por fila. MySQL tiene algunas mejoras de rendimiento significativas para grandes conjuntos de datos si carga archivos internos y hace cosas como intercambios de tablas atómicas.

Usamos 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 fila por fila en tiempo real podría ser un bucle simple para hacer en Groovy + alguna tabla para realizar un seguimiento de qué fila se ha movido.

mysql> select * from table into outfile 'tablename.dat';  

shell> myisamchk --keys-used=0 -rq '/data/mysql/schema_name/tablename'

mysql> load data infile 'tablename.dat' into table tablename;

shell> myisamchk -rq /data/mysql/schema_name/tablename

mysql> flush tables;
mysql> exit;

shell> rm tablename.dat