译:从Sql Server到MySQL移植数据

作者 Haidong Ji  翻译 GoodKid   Original




从Sql Server移植数据到 MySQL, 当然可以通过相关工具实现,它们可以建立连接,实现数据存储和数据操作,像 Access, Excel,或 SSIS。现在我将介绍一种不需要任何工具和驱动的方法。 对于一个标准的 Sql Server 和 MySQL 安装,我们可以使用这个方法完成这个任务。

使用这个手段,首先假设在MySQL中已经存在匹配 表,否则,要首先创建它们。

实现过程包括的步骤: 首先基于Sql Server 数据库元数据生成bcp(bootstrap command processor)命令 (sysobjects, 考虑MySql中的 information_schema);接下来运行生成的 bcp 命令;获得的 csv 文件可以被传输到 MySQL server上,如果尺寸较大可以考虑压缩文件;最终csv 文件将通过LOAD DATA LOCAL INFILE 命令导入到 MySQL 中。

1. 在 Sql Server 上运行下列代码以产生 bcp 命令,根据具体情况修改备份文件夹名称和数据库名称。数据库名称对应 MyDb,两处需要修改。

set nocount on

/* Set BackupFolder name here */
declare @BackupFolder varchar(100)
set @BackupFolder = 'c:\MyDataDumpFolder\'

/* Initialize variables here */
declare @TableNames table (TableTempID
smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, TableName varchar(50))
declare @TableName varchar(50)
declare @BackupFileName char(50)
declare @BackupFolderFile varchar(150)
declare @Counter smallint
declare @MaxTableCount smallint
declare @BCPOutCommand varchar(500)

/* Get the list of tables that we want to dump out as csv */
insert into @TableNames (TableName) select name from
MyDb.dbo.sysobjects where xtype = 'U'
and name not in ('dtproperties')

select @MaxTableCount = max(TableTempID) from @TableNames
set @Counter = 1

/* Loop through all each table individually, generate bcp
commands and run bcp commands to export data */
while @Counter < = @MaxTableCount

Begin

/* Create backup file name */
select @TableName = ltrim(rtrim(TableName)) from
@TableNames where TableTempID = @Counter

select @BackupFileName = ltrim(rtrim(@TableName)) + '.txt'

/* Combine backup folder name and file name */
select @BackupFolderFile = @BackupFolder + @BackupFileName

/* Create BCP command */
select @BCPOutCommand = 'bcp ' + '"MyDb.dbo.' + @TableName +
'" out "' + ltrim(rtrim(@BackupFolderFile)) +
'" -c -q -S' + @@Servername + ' -T'

print @BCPOutCommand
set @Counter = @Counter + 1
end
 

2. 在 Windows DOS 命令行运行生成的bcp命令。假设我们只有一个称为t1的表格,bcp 命令看起来如下:

bcp “test.dbo.t1″ out “c:\junk\t1.txt” -c -q -SSqlServerInstanceName -T

3. 收集这些文本 text 文件并且移动它们到MySQL server;
4. 在mysql中运行这命令以实现导入数据,如果需要可以调整目录名称。

mysql> LOAD DATA LOCAL INFILE ‘/home/haidong/Desktop/t1.txt’ INTO TABLE t1 LINES TERMINATED BY ‘\r\n’;

我已经成功测试了一些包含 number,character, datetime, 和 sequence 数据的表。 运气多变,希望对你有所帮助。

此条目发表在服务器, 程序开发分类目录,贴了, , , 标签。将固定链接加入收藏夹。