本次通过SQLyog软件将SQL Server数据库数据迁移至MySQL中

服务端:SQL Server 2016 / MySql 5.7.26

客户端:webyog SQLyog 

迁移对象:数据表的结构、数据,视图,存储过程

迁移过程:

  1. 在SQL SERVER和MYSQL中各自配置好对应数据库的用户及密码,MYSQL新建目标数据库,另外,因为源数据库的字符集为Chinese_PRC_CI_AS且数据中包含中文内容,为了避免迁移出现乱码,在SQLyog中右键已经建立好的数据库---【改变数据库】---调整字符集。

sqlsever 连接mysql sqlyog连接sqlserver_sql

  1. 打开SQLyog软件,导入外部数据

sqlsever 连接mysql sqlyog连接sqlserver_数据_02

  1. 开始一个新任务,next
  2. 新建DSN文件,数据源类型为文件数据源,驱动选择ODBC Driver 17 for SQL Server,并指定保存位置与文件名。

sqlsever 连接mysql sqlyog连接sqlserver_mysql_03

  1. 在导入向导页面填写数据源的用户名和密码,下一步,设定数据源服务器IP地址及登录方式,选择要迁移的数据库,NEXT从数据源复制表

sqlsever 连接mysql sqlyog连接sqlserver_数据_04

  1. 选择待迁移的表、视图等,建议表、视图、存储过程分开处理,不要一次性转换。

sqlsever 连接mysql sqlyog连接sqlserver_sqlsever 连接mysql_05

  1. 注意:开始迁移前必须检查和修正待转移表中所有数据类型为bit和timestamp的字段,并将其映射修改为tinyint和datetime(sql原先表中的datime类型在SQLyog中会自动变为timestamp类型,全部都得检查修改)

sqlsever 连接mysql sqlyog连接sqlserver_sql_06



  1.        如果涉及的表和字段比较少,可以点击表后面的【map】栏中【...】,打开弹窗后,修改对应字段的Type列;
           如果涉及的表及字段比较多,那么上面的方法太慢,可以在配置完后不要着急迁移,先保存任务为文件,从资源管理器打开该文件,使用文本编辑器将bit批量替换为tinyint,timestamp批量替换为datetime,保存文档。
  2. 重新打开导入外部数据向导,选择上步保存的任务文件,NETX直到开始转换。
  3. 转换过程较慢,需要耐心等待,注意保持计算机不要进入睡眠状态,直到窗口显示【Total time taken -xxxx sec】,转换完成。
  4. 参考:我本次迁移的数据表193个,共计685万多行,用时9069秒(约2.5小时),数据平稳迁移,经校验数据完整没有出错。
  1. sqlsever 连接mysql sqlyog连接sqlserver_sql_07sqlsever 连接mysql sqlyog连接sqlserver_数据库_08
  1. 视图的导入:SSMS中右键数据库,【任务】-【生成脚本】先生成脚本,去除多余的
USE [NJDB2]
GO
/****** Object:  View [dbo].[v1_BarcodeB]    Script Date: 05/23/2023 17:03:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
  1. DAC连接后解密存储过程(如果你加密了),参考上一步导出存储过程。