将MySQL数据库导入MS SQL Server

问题描述 投票:78回答:8

我有一个来自MySQL转储的.sql文件,其中包含要插入这些表中的表,定义和数据。如何将转储文件中表示的此数据库转换为MS SQL Server数据库?

mysql sql-server mysqldump
8个回答
56
投票

使用SQL Server Migration Assistant (SSMA)

除了MySQL,它还支持Oracle,Sybase和MS Access。

它看起来非常聪明,能够处理非常重要的转移。它还有一些命令行界面(除了GUI),因此从理论上讲它可以集成到一些批量加载过程中。

这是MySQL版本https://www.microsoft.com/en-us/download/details.aspx?id=54257的当前下载链接

当前(2016年6月)稳定版本6.0.1在传输数据时与当前(5.3.6)MySQL ODBC驱动程序崩溃。一切64位。带有5.1.13 ODBC驱动程序的5.3版本可以正常工作。


15
投票

我建议你像这样使用mysqldump

mysqldump --compatible=mssql

phpMyAdmin仍然是一个Web应用程序,可能对大型数据库有一些限制(脚本执行时间,可分配内存等)。


13
投票

我在网上找到了一种方法

它需要一些工作,因为它必须逐桌完成。但无论如何,我可以将表,数据和约束复制到MS SQL数据库中。

链接在这里

http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx


7
投票

这是我将.sql文件导入MS SQL的方法:

  1. 使用--compatible=mssql--extended-insert=FALSE选项从MySQL导出表: mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
  2. 使用PowerShell将导出的文件拆分为每个文件300000行: $i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
  3. 在MS SQL Server Management Studio中运行每个文件

how to speed up the inserts提示很少。

Other approach is to use mysqldump –where option。通过使用此选项,您可以在where sql子句支持的任何条件下拆分表。


5
投票

如果使用PhpMyAdmin进行导出,则可以将sql兼容模式切换为“MSSQL”。这样,您只需针对MS SQL数据库运行导出的脚本即可。

如果你不能或不想使用PhpMyAdmin,那么在mysqldump中也有兼容性选项,但我个人更愿意让PhpMyAdmin为我做。


3
投票

我今天遇到了一个非常类似的问题 - 我需要将一个大表(5百万行)从MySql复制到MS SQL中。

以下是我已经完成的步骤(在Ubuntu Linux下):

  1. 在MS SQL中创建了一个表,该表与MySql中的源表匹配。
  2. 已安装的MS SQL命令行:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
  3. 从MySql转储到文件的表:
mysqldump \
    --compact \
    --complete-insert \
    --no-create-info \
    --compatible=mssql \
    --extended-insert=FALSE \
    --host "$MYSQL_HOST" \
    --user "$MYSQL_USER" \
    -p"$MYSQL_PASS" \
    "$MYSQL_DB" \
    "$TABLE" > "$FILENAME"
  1. 在我的情况下,转储文件非常大,所以我决定将它拆分成许多小块(每行1000行) - split --lines=1000 "$FILENAME" part-
  2. 最后,我迭代了这些小文件,做了一些文本替换,并针对MS SQL服务器逐个执行了这些部分:
export SQLCMD=/opt/mssql-tools/bin/sqlcmd

x=0

for file in part-*
do
  echo "Exporting file [$file] into MS SQL. $x thousand(s) processed"

  # replaces \' with ''
  sed -i "s/\\\'/''/g" "$file"

  # removes all "
  sed -i 's/"//g' "$file"

  # allows to insert records with specified PK(id)
  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"
  echo ""
  echo ""

  x=$((x+1))
done

echo "Done"

当然你需要替换我的变量,如$AZURE_SERVER$TABLE,e.t.c。和你的。

希望有所帮助。


0
投票

您还可以使用“ODBC”+“SQL Server导入和导出向导”。以下链接描述了它:https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/

enter image description here


0
投票

跑:

mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql

你想看到一个过程栏吗?

pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
© www.soinside.com 2019 - 2024. All rights reserved.