90

I've been banging my head against SQL Server 2005 trying to get a lot of data out. I've been given a database with nearly 300 tables in it and I need to turn this into a MySQL database. My first call was to use bcp but unfortunately it doesn't produce valid CSV - strings aren't encapsulated, so you can't deal with any row that has a string with a comma in it (or whatever you use as a delimiter) and I would still have to hand write all of the create table statements, as obviously CSV doesn't tell you anything about the data types.

What would be better is if there was some tool that could connect to both SQL Server and MySQL, then do a copy. You lose views, stored procedures, trigger, etc, but it isn't hard to copy a table that only uses base types from one DB to another... is it?

Does anybody know of such a tool? I don't mind how many assumptions it makes or what simplifications occur, as long as it supports integer, float, datetime and string. I have to do a lot of pruning, normalising, etc. anyway so I don't care about keeping keys, relationships or anything like that, but I need the initial set of data in fast!

Niranjan N Raju
  • 12,047
  • 4
  • 22
  • 41
Mat
  • 6,694
  • 7
  • 35
  • 39
  • 1
    I've heard that SQLYob can do it. here: – borjab Sep 22 '08 at 13:27
  • 1
    I've heard a few people using [MSSQL2MySQL](http://www.kofler.cc/mysql/mssql2mysql.html) with success, but I can't vouch for it myself. – Greg Hurlman Aug 01 '08 at 16:24
  • This tool is exactly what you asked for: [Full Convert Enterprise](http://www.spectralcore.com/fullconvert/). True, you lose views, procedures and triggers, but it's highly optimized for huge tables. Another solution (more expensive) which translates all objects (procedures etc.) is [SqlTran SQL Server to MySQL](http://www.sqltran.com/sql-server-to-mysql/) – Damir Bulic Aug 02 '12 at 08:35
  • 1
    Similar answer here: http://stackoverflow.com/questions/11619177/sql-server-2008-r2-to-mysql-migration/11625261#11625261 – Jacob Aug 02 '12 at 11:34
  • 1
    @borjab: SQLyog used to work with ODBC in older versions but does not anymore, so it's not an option for this job. – BlaM Aug 30 '12 at 12:07

5 Answers5

59

The best way that I have found is the MySQL Migration Toolkit provided by MySQL. I have used it successfully for some large migration projects.

Nick Berardi
  • 54,393
  • 15
  • 113
  • 135
  • 2
    +1 - It is now EOL, and MySQL Workbench is going to include a migration plugin (past version 5.2) but for now use the following link: http://dev.mysql.com/downloads/gui-tools/5.0.html – Mark Robinson Apr 28 '10 at 14:58
  • doesn't want to convert DATE or DATETIME columns :( – Robert Ivanc May 22 '10 at 01:39
  • 1
    Note: Currently, the MySQL Migration Toolkit is not available for Linux (from http://dev.mysql.com/doc/migration-toolkit/en/gui-tools-installation-linux.html) – mkirk Mar 23 '11 at 20:25
  • 1
    Note that the My SQL Migration Toolkit requires the 32-bit version of JDK 5 update 8 or later (must be ver 5, ver 6 won't work), which you can download here: http://tinyurl.com/5snd6y3 – casterle Oct 19 '11 at 14:26
9

SQL Server 2005 "Standard", "Developer" and "Enterprise" editions have SSIS, which replaced DTS from SQL server 2000. SSIS has a built-in connection to its own DB, and you can find a connection that someone else has written for MySQL. Here is one example. Once you have your connections, you should be able to create an SSIS package that moves data between the two.

I ddin't have to move data from SQLServer to MySQL, but I imagine that once the MySQL connection is installed, it works the same as moving data between two SQLServer DBs, which is pretty straight forward.

Tanjim Ahmed Khan
  • 650
  • 1
  • 9
  • 21
Sean
  • 472
  • 2
  • 13
9

Using MSSQL Management Studio i've transitioned tables with the MySQL OLE DB. Right click on your database and go to "Tasks->Export Data" from there you can specify a MsSQL OLE DB source, the MySQL OLE DB source and create the column mappings between the two data sources.

You'll most likely want to setup the database and tables in advance on the MySQL destination (the export will want to create the tables automatically, but this often results in failure). You can quickly create the tables in MySQL using the "Tasks->Generate Scripts" by right clicking on the database. Once your creation scripts are generated you'll need to step through and search/replace for keywords and types that exist in MSSQL to MYSQL.

Of course you could also backup the database like normal and find a utility which will restore the MSSQL backup on MYSQL. I'm not sure if one exists however.

8

Rolling your own PHP solution will certainly work though I'm not sure if there is a good way to automatically duplicate the schema from one DB to the other (maybe this was your question).

If you are just copying data, and/or you need custom code anyway to convert between modified schemas between the two DB's, I would recommend using PHP 5.2+ and the PDO libraries. You'll be able to connect using PDO ODBC (and use MSSQL drivers). I had a lot of problems getting large text fields and multi-byte characters from MSSQL into PHP using other libraries.

pix0r
  • 31,139
  • 18
  • 86
  • 102
6

Another tool to try would be the SQLMaestro suite. It is a little tricky nailing down the precise tool, but they have a variety of tools, both free and for purchase that handle a wide variety of tasks for multiple database platforms. I'd suggest trying the Data Wizard tool first for MySQL, since I believe that will have the proper "import" tool you need.

Tanjim Ahmed Khan
  • 650
  • 1
  • 9
  • 21
Dillie-O
  • 29,277
  • 14
  • 101
  • 140