记一次 mysql迁徙数据到SqlServer

因 mysql数据库快过期,公司不再续租 所以要迁移数据到SqlServer上

表大概就几个 数据量不大 20w左右  所有表都设有自增主键

记一下笔记方便以后参考

1.  测试环境生成Sqlserver表

因用的ef core 所以直接在测试环境把表在sqlserver生成下

大概用到的东西是 dotnet ef migrations  及 dotnet ef database update  下面是当时的配置 记下作参考

//DHX.ComEvent.WebApi 根目录下执行
//dotnet ef migrations add InitialModel -c EventContext -p ../DHX.ComEvent.Infrastructure/DHX.ComEvent.Infrastructure.csproj -s DHX.ComEvent.csproj
//dotnet ef database update -c EventContext -p ../DHX.ComEvent.Infrastructure/DHX.ComEvent.Infrastructure.csproj -s DHX.ComEvent.csproj

2.  表结构拷贝到正式环境

可以用下面命令生成脚本到正式sqlserver执行 需在 web根目录下执行(就是有Program.cs的目录)

dotnet ef migrations script  -c eventcontext

把生成的脚本在正式上执行创建表结构

3. 为 MySQL安装ODBC驱动

步骤: 安装mysql驱动 参考链接: https://blog.csdn.net/song_jiang_long/article/details/52688989

安装好驱动后 后再sqlserver的服务器对象 - 链接服务器 - 有你新加的链接  注意驱动名要修改,上文用的版本较低 我的数据库是mysql8.0 所以下载的是8.0驱动

EXEC master.dbo.sp_addlinkedserver
@server = N'MYSQL',
@srvproduct=N'MySQL',
@provider=N'MSDASQL',
@provstr=N'DRIVER={MySQL ODBC 8.0 ANSI Driver}; SERVER=192.168.123.76; _DATABASE=dhx_event; USER=root; PASSWORD=123456; OPTION=3'

4. 迁徙

mysql的表都是自增主键,在其他表都有用id做关联(无外键) ,所以迁徙时候id要和之前一致  

下面是一个表的示例   set identity_insert Event_Categories ON 可以让数据库在设有自增主键时候插入主键 用完要设置为OFF 另外所有的字段都要写 如果是使用sql server management的话, 可以省得一个个写字段名  选中表 - 右键  -编写脚本为 - SELECT到新窗口

set identity_insert Event_Categories ON 
insert into Event_Categories([Id]
,[create_date]
,[create_person]
,[update_date]
,[update_person]
,[Name]
,[Order]
,[ImgUrl]) select [Id]
,[create_date]
,[create_person]
,[update_date]
,[update_person]
,[Name]
,[Order]
,[ImgUrl] from openquery(MYSQL, 'SELECT * FROM dhx_event.Event_Categories');
set identity_insert Event_Categories OFF

原文地址:https://www.cnblogs.com/xtxtx/p/11983544.html