Mysql
 sql >> Database >  >> RDS >> Mysql

Trasferimento dati da SQL Server a MySQL

Ho usato il bridge jdbc-odbc in Java per fare proprio questo in passato, ma le prestazioni tramite ODBC non sono eccezionali. Suggerirei di guardare qualcosa come http://jtds.sourceforge.net/ che è un driver Java puro che puoi inserire in un semplice script Groovy come il seguente:

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
}

I seguenti numeri di prestazioni ti danno un'idea di come potrebbe funzionare:http://jtds.sourceforge.net /benchTest.html

Potresti trovare alcuni vantaggi in termini di prestazioni per il dump dei dati in un formato di file di dump mysql e l'utilizzo di mysql loaddata invece di scrivere riga per riga. MySQL ha alcuni miglioramenti significativi delle prestazioni per set di dati di grandi dimensioni se carichi file infile e fai cose come scambi di tabelle atomiche.

Usiamo qualcosa del genere per caricare rapidamente file di dati di grandi dimensioni in mysql da un sistema all'altro, ad es. Questo è il meccanismo più veloce per caricare i dati in MySQL. Ma riga per riga in tempo reale potrebbe essere un semplice ciclo da fare in groovy + qualche tabella per tenere traccia di quale riga è stata spostata.

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