Click here to Skip to main content
Click here to Skip to main content

Migrate MySQL to Microsoft SQL Server

By , 5 Sep 2008
 

Introduction

This article describes a few simple steps in order to migrate MySQL into Microsoft SQL Server 2005. The technique is very easy, but useful if you plan to move your data from MySQL and upgrade it finally to a Microsoft SQL Server environment.

Background

Initially, I started my search for an article on CodeProject regarding MySQL->MS SQL migration without any success. I had an old PHPbb forum running, that needed to be upgraded to a Microsoft environment entirely. I could have just kept MySQL and Apache server, but instead I decided to migrate the entire concept of PHPbb to a YAF-forum.

Setup ODBC Connection to MySQL Database

This article will not go through how to setup a MySQL or Microsoft SQL server, but make sure you have downloaded at least the MySQL ODBC Connector from here.

For this article, I downloaded the MySQL ODBC Connector 5.1.

The setup of this connector is pretty simple:

  • Open your ODBC Data Source Administrator from the Control Panel -> Administrative Tools. Under the tab labelled as "System DSN", press the "Add" button.

    Setup_ODBC1.jpg

  • On the "Create New Data Source" dialog that appeared, choose MySQL ODBC 5.1 Driver and then press the "Finish" button.

    Setup_ODBC2.jpg

  • After that, a MySQL connection configuration dialog will appear. Add your MySQL database account information in it, preferably the "root" account which has full access to your databases in MySQL. In this case, my database is called "tigerdb". Do not change the port to anything other than 3306, unless during your MySQL server installation, you have defined something else.

    Setup_ODBC3.jpg

  • Press the "Test" button to ensure your connection settings are set properly and then the "OK" button when you're done.

Create a Microsoft SQL Link to your MySQL Database

In this state, you are ready to establish a link towards MySQL database from your Microsoft SQL Server Management Studio. Open a query window and run the following SQL statement:

EXEC master.dbo.sp_addlinkedserver 
@server = N'MYSQL', 
@srvproduct=N'MySQL', 
@provider=N'MSDASQL', 
@provstr=N'DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; _
	DATABASE=tigerdb; USER=root; PASSWORD=hejsan; OPTION=3'

This script will produce a link to your MySQL database through the ODBC connection you just created in the previous stage of this article. The link will appear in the Microsoft SQL Server Management Studio like this:

Create_link.jpg

If it doesn't show up in the treeview, press the refresh button.

Import Data between the Databases

Create a new database in Microsoft SQL Server. I called mine "testMySQL". In the query window, run the following SQL statement to import table shoutbox from the MySQL database tigerdb, into the newly created database in Microsoft SQL called testMySQL.

SELECT * INTO testMySQL.dbo.shoutbox
FROM openquery(MYSQL, 'SELECT * FROM tigerdb.shoutbox')

That's it!

Points of Interest

During this migration, I had to import lately my newly migrated database into the structure of "Yet Another Forum" tables. For that, I used a series of SQL-scripts. However I am not going to post them here. If folks leave comments here about the need for these scripts, just tell me and I will gladly change this article and start adding them. You're welcome to post your comments.

Another issue you will most likely encounter are the differences between these two databases based on datatypes. I would suggest to proceed with a reverse engineering of your MySQL database (for example, Visio is one application that provides reverse engineering functionality) and start mapping all the differences and potential risks of losing parts of data for instance, within varchar columns.

Microsoft SQL datatypes: http://msdn.microsoft.com/en-us/library/aa258271.aspx

MySQL datatypes: http://dev.mysql.com/tech-resources/articles/visual-basic-datatypes.html

History

  • 2008-09-05: First version of this article

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Niklas Henricson
Software Developer (Senior) TakePoint AB
Sweden Sweden
Member
I started my journey with programming 1999 by working for the Swedish Working Life Enviroment authority.
 
Since then, I've been involved in numerous projects and jobs involving MTS/COM+, VB 6.0, ISE Eiffel 4.5, ASP.NET/C#/VB.NET as well as common ASP, and finally database enviroments based on Oracle, MySQL and MS SQL.
 
Between April 2007 and December 2008, I worked as consultant for Mandator AB with some of my assignments at Ericsson ST in Stockholm.
 
In 2009 I moved to south Sweden where I continued working as an IT consultant at Cybergroup Group South AB with assignments at Sony Ericsson, Swedish Institute for Infectious Disease Control and other in-house projects.
 
Today, I work for a smaller consultant company called TakePoint AB with an assignment at BTJ (Bibliographic Services of Sweden) developing a system that service all public libraries of Sweden with bibliographic information and distribution of media.
 
One of my most favorite books in regards to programming is "The Pragmatic Programmer". Something that I definetely recommend for everyone to read.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionBro you are a F*&(ng Legend!!memberRobert James Battam23 May '13 - 19:36 
Saved me buying one of those convertor programs! Big Grin | :-D
GeneralThank Youmemberron_x15 Mar '13 - 2:17 
Thank you it helped me a lot... Smile | :)
GeneralRe: Thank YoumemberNiklas Henricson15 Mar '13 - 3:21 
You're most welcome Smile | :)
Niklas Henricson

Questionthank youmemberanhdktk18 Dec '12 - 1:50 
Useful post
GeneralMy vote of 5memberMember 84230921 Dec '12 - 1:14 
Excellent article
SuggestionA note for 64 bit users...memberandymccluggage21 Aug '12 - 0:17 
Remember if you're using a 64 bit Windows environment that you need to create the System DSN using the 32 bit version of the DSN Administrator Tool. By default the control panel loads the 64 bit version.
 
32 bit version can be loaded from here...
 
c:\windows\syswow64\odbcad32
GeneralRe: A note for 64 bit users...memberSamsonSargsyan20 Apr '13 - 10:26 
Hi
But I cannot find mysql odbc provider in c:\windows\syswow64\odbcad32.
Please help.
QuestionMultiple TablesmemberRicardo Casquete6 Aug '12 - 15:03 
.... good stuff Smile | :) , however I am dealing with 70 tables here.
Maybe in a stored proc?
 
Cheers
Ricardo Casquete

QuestionThere are 3rd party tools for thismemberDamir Bulic1 Aug '12 - 21:38 
I believe it's good to know that such migration can be done extremely quickly with a commercial application Full Convert Enterprise. It doesn't require ODBC drivers at all and is very fast.
Regarding search for equivalent datatypes - Full Convert automatically selects closest matching datatypes, even taking into consideration target database version. For example, date and time datatypes are introduced in SQL Server 2008 and not available in earlier versions. Also, Full Convert allows datatype (and many other things) customization.
SuggestionRe: There are 3rd party tools for thismemberDmitry Narizhnykh14 Nov '12 - 8:16 
Another tool to automate the migration is DBConvert for MySQL and MS SQL
It takes about 5-10 minutes to convert 1Million records.
Automatic views conversion between MS SQL and MySQL is available.
Dmitry

QuestionProblem with the second querymemberEhud Grand10 Jun '12 - 3:41 
Hey
The first query workd fine, but when I test the linked server I get 7307 error.
Any idea how I solve it?
Thank you!
Questioncopy just data or whole table structure too? [modified]memberr7ap7r29 May '12 - 0:41 
Hi,
 
Do i have first to create the table with its collumns and datatypes in my test database in SQL?
Or does this script migrate everything (table structure and data)?
 
Error message after the second script:
<<Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "MYSQL".>>
 
what did I do wrong?

modified 29 May '12 - 6:50.

BugError occur when compile last query in SQL2005memberBilal Ahmed Lilla17 Apr '12 - 21:44 
I successfully complete all steps but last query not run.
mySql database name : emots.
Sqldatabase:testMySQL.
myQuery :
SELECT * INTO testMySQL.dbo.shoutbox
FROM openquery(MYSQL, 'SELECT * FROM emots.shoutbox')
 
MSSQL version : 2005
ERROR:
OLE DB provider "MSDASQL" for linked server "MYSQL" returned message "[MySQL][ODBC 5.1 Driver][mysqld-5.0.45-community-nt]Table 'emots.shoutbox' doesn't exist".
Msg 7350, Level 16, State 2, Line 1
Cannot get the column information from OLE DB provider "MSDASQL" for linked server "MYSQL".
GeneralRe: Error occur when compile last query in SQL2005memberDarvin Pappachan13 Aug '12 - 21:36 
This query missing the semi colon, which is mandatory in mysql queries.
Use like this
SELECT * INTO testMySQL.dbo.shoutbox
FROM openquery(MYSQL, 'SELECT * FROM emots.shoutbox;')

GeneralMy vote of 5membermanoj kumar choubey2 Apr '12 - 0:28 
Nice
GeneralMy vote of 5memberSimbarasheM24 Feb '12 - 11:08 
Excellent Article. Still worth 5 Stars but there are known issues with SQL Server 2008 acknowledged by Microsoft. Anyone found a solution to the column u permissions error when you try to view the data in a table?
QuestionWhat about varbinary fields?memberKiks14 Feb '12 - 2:18 
I've got a similar task to do, but at the opposite.
I need to syncronize a mySQL db with a SQL Server 2008 db.
These dbs contains some blob fields (varbinary(max) in SQL Server that in mySQL are MEDIUMBLOB), but when I run the INSERT statement, I receive this error:
 
Provider OLD DB "MSDASQL" for linked server XXX reply with the message "Query-based Insert and update statement are non supported for Blob values"
 
Any idea to resolve this?
Thans
QuestionProblem to migrate a whole mysql DB into MSSQL 2008memberKodjak25 Nov '11 - 0:59 
Hi Niklas,
thanks for this nice article, almost everything went smoothly. But I do have a few questions:
1. In this script:
EXEC master.dbo.sp_addlinkedserver
@server = N'MYSQL',
@srvproduct=N'MySQL',
@provider=N'MSDASQL',
@provstr=N'DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; _
DATABASE=tigerdb; USER=root; PASSWORD=hejsan; OPTION=3'
 
What does the option=3 stand for?
 
And now my real problem, where I need help with:
That's the script I'm running:
SELECT * INTO mysqlforum.dbo.shoutbox
FROM openquery(mysql, 'SELECT * FROM mysql')
 
In your own script the last line ends with FROM tigerdb.shoutbox, but that shoutbox part, I don't have that actually. My database is just called mysql.
 
When I run the script MSSQL 2008 gives me following error:
OLE DB provider "MSDASQL" for linked server "mysql" returned message "[MySQL][ODBC 5.1 Driver][mysqld-5.1.53-community-log]No database selected".
Msg 7350, Level 16, State 2, Line 1
Cannot get the column information from OLE DB provider "MSDASQL" for linked server "mysql".
 
What does this error means?
 
A bit of background information:
The mysql db I want to migrate is part of the WAMP server. I do have a second DB, it's the InformationSchema.
 
Any advice is appreciated.
 
Kind regards,
Jay
AnswerRe: Problem to migrate a whole mysql DB into MSSQL 2008memberKodjak25 Nov '11 - 3:32 
For all others, I could solve my problem as it was due to a few misunderstandings of the scripts above.
QuestionproblemmemberMihaly Sogorka9 Nov '11 - 5:12 
Hi!
I've got an error message when trying to select from MySql database:
 
Query:
 
SELECT * FROM openquery(INTERSPIRE2, 'SELECT * FROM send.ss_newsletters')
 
Error message:
 
OLE DB provider "SQLNCLI" for linked server "INTERSPIRE2" returned message "Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "INTERSPIRE2" returned message "An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections.".
Msg 53, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [53]. 
 
What could be wrong?
 
Thanks in advence!
AnswerRe: problemmemberNiklas Henricson9 Nov '11 - 6:43 
Mihaly Sogorka wrote:
"An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections."

 
Like the message indicates you need to allow your SQL server, remote connections. Creation of database links are clasified as such. Go to your SQL Server Configuration Manager and check your settings, or look for help by searching at MSDN troubleshooting pages.
Niklas Henricson

QuestionError to mygrate datamemberratulalam7 Oct '11 - 21:56 
I have run the script
 

 
EXEC master.dbo.sp_addlinkedserver
@server = N'MYSQL',
@srvproduct=N'MySQL',
@provider=N'MSDSQL',
@provstr=N'DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost;DATABASE=test; PASSWORD=alam; OPTION=3'
But when I run the following script:
 
SELECT * INTO testMySQL.dbo.shoutbox
FROM openquery(MYSQL, 'SELECT * FROM test.aa')
 

 
I get the error:
 
Msg 7403, Level 16, State 1, Line 1
The OLE DB provider "MSDSQL" has not been registered.
 
So how Can I solve the problem?
Thanks in Advaance........
AnswerRe: Error to mygrate datamemberNiklas Henricson9 Nov '11 - 6:44 
Hello,
 
It would seem that your MySQL ODBC provider was not installed properly. Either install a new one, or try by reinstalling it. This is pure installation and configuration issue I cannot help you much with.
Niklas Henricson

QuestionDon't see MySQL option when adding new ODBC data source in control panelmemberhalifaxdal18 Sep '11 - 1:59 
Thank you for sharing this with us, this is what I need now.
 
However, I stuck at the very beginning, when I try to install a new ODBC data source, I don't even see "MySQL ODBC 5.1 Driver" like in your second screenshot in the post. Cry | :((
 
What's missing here?
 
Thank you very much.
 
The email I registered for CodeProject is full of spam now, if you know how to fix it, could you please send me email at xie3208080 gmail com?
 
Thanks again and hoping to hearing from you soon.
AnswerRe: Don't see MySQL option when adding new ODBC data source in control panelmemberNiklas Henricson9 Nov '11 - 6:48 
At the time I was writing this article things have changed. Did you use the same environment I specify on the top of the article (SQL Server 2005, Win XP)? Try reinstalling your mySQL ODBC provider or download a newer one. If you are using Windows 7, Windows 8 alfa or any other newer operating system, configuration settings might be relocated.
Niklas Henricson

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130523.1 | Last Updated 5 Sep 2008
Article Copyright 2008 by Niklas Henricson
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid