将MySQL数据库导入MS SQL Server
我有一个包含表格,定义和数据的MySQL转储的.sql文件被插入到这些表中。 如何将转储文件中表示的数据库转换为MS SQL Server数据库?
使用SQL Server迁移助理(SSMA)
除了MySQL,它还支持Oracle,Sybase和MS Access。
它似乎相当聪明,甚至能够处理非平凡的转移。 它还有一些命令行界面(除了GUI),理论上它可以被集成到一些批量加载过程中。
这是MySQL版本的当前下载链接http://www.microsoft.com/en-us/download/details.aspx?id=42657
当前(2016年6月)稳定版本6.0.1在传输数据时与当前(5.3.6)MySQL ODBC驱动程序崩溃。 一切都是64位的。 具有5.1.13 ODBC驱动程序的5.3版本正常工作。
我build议你使用mysqldump像这样:
mysqldump --compatible=mssql
phpMyAdmin仍然是一个Web应用程序,可能会有一些大型数据库 (脚本执行时间,可分配内存等)的限制。
我在网上find了一个方法
它需要一点点的工作,因为它必须一桌一桌地完成。 但无论如何,我可以将表,数据和约束条件复制到MS SQL数据库中。
链接在这里
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
这里是我的方法来导入.sql文件到MS SQL:
-
从MySQL导出表格
--compatible=mssql
和--extended-insert=FALSE
选项:mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
-
使用PowerShell将导出的文件分割为每个文件300000行:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
-
在MS SQL Server Management Studio中运行每个文件
有几个提示如何加快插入 。
其他方法是使用mysqldump –where
选项 。 通过使用这个选项,你可以在任何由sql语句支持的条件下拆分你的表。
如果使用PhpMyAdmin进行导出,则可以将SQL兼容模式切换为“MSSQL”。 这样,你只需运行导出的脚本对MS SQL数据库,你就完成了。
如果你不能或不想使用PhpMyAdmin,在mysqldump中也有一个兼容性选项,但是我个人宁愿让PhpMyAdmin为我做。
这家伙有一个简单的把戏,使用MS Access作为MySQL和MSSQL之间的tunel
你可以阅读这篇文章http://azamudd.in/convert-data-from-mysql-into-mssql-the-easy-way-via-ms-access/
也可以使用“ODBC”+“SQL Server导入和导出向导”。 下面的链接描述它: https : //www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
我今天有一个非常类似的问题 – 我需要从MySql复制一个大表(500万行)到MS SQL。
以下是我已经完成的步骤(在Ubuntu Linux下):
-
在MS SQL中创build了一个与MySql中的源表相匹配的表。
-
安装MS SQL命令行: https : //docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
-
将MySql中的表转储到文件中:
mysqldump \ --compact \ - 完全插入\ --no-create-info \ --compatible = mssql \ --extended-insert = FALSE \ --host“$ MYSQL_HOST”\ --user“$ MYSQL_USER”\ -p“$ MYSQL_PASS”\ “$ MYSQL_DB”\ “$ TABLE”>“$ FILENAME”
-
在我的情况下,转储文件是相当大的,所以我决定把它分成许多小块(每个1000行) –
split --lines=1000 "$FILENAME" part-
-
最后,我遍历这些小文件,做了一些文本replace,并逐一对MS SQL服务器执行这些部分:
导出SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0的 部分文件 - * 做 echo“将文件[$ file]导出到MS SQL中$ x(s)processed” 用''代替\' sed -i“s / \\\'/''/ g”“$ file” #删除所有“ sed -i's /“// g'”$ file“ #允许插入指定PK(id)的logging sed -i“1s / ^ / SET IDENTITY_INSERT $ TABLE ON; \ n /”“$ file” “$ SQLCMD”-S“$ AZURE_SERVER”-d“$ AZURE_DB”-U“$ AZURE_USER”-P“$ AZURE_PASS”-i“$ file” 回声“” 回声“” X = $((X + 1)) DONE 回声“完成”
当然你需要用你的$AZURE_SERVER
, $TABLE
等replace我的variables。
希望有所帮助。