Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Transferência de dados SQL Server para MySQL


Eu usei a ponte jdbc-odbc em Java para fazer exatamente isso no passado, mas o desempenho por meio de ODBC não é ótimo. Eu sugiro olhar para algo como http://jtds.sourceforge.net/ que é um driver Java puro que você pode colocar em um script Groovy simples como o seguinte:
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
}

Os números de desempenho a seguir dão uma ideia de como ele pode funcionar:http://jtds.sourceforge.net /benchTest.html

Você pode encontrar algumas vantagens de desempenho para despejar dados em um formato de arquivo de despejo mysql e usar mysql loaddata em vez de escrever linha por linha. O MySQL tem algumas melhorias de desempenho significativas para grandes conjuntos de dados se você carregar infiles e fazer coisas como trocas de tabelas atômicas.

Usamos algo assim para carregar rapidamente grandes arquivos de dados no mysql de um sistema para outro, por exemplo. Este é o mecanismo mais rápido para carregar dados no mysql. Mas linha por linha em tempo real pode ser um loop simples para fazer em groovy + alguma tabela para acompanhar qual linha foi movida.
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