登录
  • 人们都希望被别人需要 却往往事与愿违
  • 天朝知识分子分三类: 1 沉默的大多数 2 公共知识分子 3 '公公'知识分子

从SQL Server导出海量数据到MySQL的新思路

IT Benny小土豆 10595次浏览 1782字 9个评论
文章目录[显示]

话说,今天给自己找了个事,要把一个数据量比较大的巨硬的SQL Server中的数据导入到MySQL中。

话说这数据量有多大呢?bak备份文件就有187M,数据库的表有90万行的数据。

那导入就导入呗,怎么来呢……

从MSSQL中导出sql脚本

似乎这是个放之四海而皆准的原则,咱都这么干。于是……

任务-生成脚本,高级中把“仅限架构”改成架构和数据

从SQL Server导出海量数据到MySQL的新思路

嗯,静静等待导出……

从SQL Server导出海量数据到MySQL的新思路

唔,1.13G的脚本,估计导回到MySQL里……反正我做完饭刷完碗洗完澡了还没导完。别想了,数据量小的话还可以玩玩,这么大,放弃吧。

MySQL Migration Toolkit

别想了,这玩意早就停止维护了。就算用的成也一堆bug的吧。

从SQL Server导出海量数据到MySQL的新思路

哥哥,我真的有JRE的……

导出成csv,用MySQL Front导入

任务-导出数据,目标选择"平面文件目标",在第一行显示列名称

从SQL Server导出海量数据到MySQL的新思路

然后打开MySQL Front输入 - csv文件,飞快的导入,好像没什么问题?然而并没有。

从SQL Server导出海量数据到MySQL的新思路

用phpmyadmin?别想了,PHP默认有上传文件大小限制,phpmyadmin本身也有,就算这俩都不是问题,Nginx还不乐意给了5xx报错呢。

别用MySQL Front试了,我改了各种编码格式,从utf-8到gbk到gb2312,全完蛋。

导出成Excel

那试试导出成Excel?

报错,一堆看不懂的错误提示。

从SQL Server导出海量数据到MySQL的新思路

打开Excel一看,65535……下一个应该溢出了啊,?回负数了啊

从SQL Server导出海量数据到MySQL的新思路

SQL Server直接导出到MySQL

看样子很牛逼哈,当然要先安装MySQL的.Net驱动程序哈。然后任务-导出,目标选择MySQL,大概像下图这样:

从SQL Server导出海量数据到MySQL的新思路

然后下一步……

从SQL Server导出海量数据到MySQL的新思路

巨硬你是我爹还不行嘛……

行了,我还是说两种可行的方案吧。

方案一:MySQL Workbench

下载MySQL Migration Toolkit的时候,官方告诉我,这玩意停止开发啦,去用MySQL Workbench吧。好,那好吧。当然要提前下载好MySQL的ODBC驱动啊。

没错,Database – Migration Wizard,你是巫师也没用啊(☆-v-)

Source选择MS SQL,Connection Method选择ODBC(native)

从SQL Server导出海量数据到MySQL的新思路

目标就选择MySQL,很简单的设置。然后下一步选择数据库,一路下一步基本上……有的时候,你会卡在这:

从SQL Server导出海量数据到MySQL的新思路

不知道为啥这三个小圈圈都是空白的,没办法下一步。我保证test connection是没有问题的!(你信吗)

有的时候通过了,下一步到某个步骤时……可能会报各种奇怪的错误!忘记截图了。至少我第一次的时候各种报错……

好吧,其实我想说的是,这个Workbench其实是能用的,就是某一步不小心弄错了的话,就会失败,而且报错看不明白……

从SQL Server导出海量数据到MySQL的新思路

你看这不就在导入呢么……

用JetBrains全家桶的数据库工具导入csv文件

打开一个JetBrains的IDE(要Professional的哦),view-toolbox-database,添加MySQL数据源。

新建一个schema,右键-import data from file,选择我们的csv文件

从SQL Server导出海量数据到MySQL的新思路

之后出现窗口让我们定义这个表格的数据类型啊、列名什么的,列名双击可以更改数据类型,上下移动以及映射之后的列名。

从SQL Server导出海量数据到MySQL的新思路

推荐大家把write errors选中,这样如果出错,可以看日志。

之后ok导入,速度还可以哈。

从SQL Server导出海量数据到MySQL的新思路

但是你看,最后我这里报错了,说这个类型无法转换成float,估计PyCharm是根据csv里第一列的数据来决定导入之后的每一列使用什么类型,于是就给某列判断成了float,没想到后面我的某个数据不是全数字的而带上了字母。

从SQL Server导出海量数据到MySQL的新思路那就在上上个图里给Type改成Text或者varchar什么的就好啦(可以参考源数据库)

总结

JetBrains的database工具真的是太好用了,支持很多数据库,功能也很强大,容错能力也很强。还要什么管理工具啊,有个它就完全足够了。

如果你是学生有edu邮箱,快申请免费使用;

如果你在大公司工作(尤其是外企),跟老板要去;

如果你有钱,自己花钱订阅;

如果你没有edu邮箱,老板不给买,还穷,那就很不地道的改时间骗骗JetBrains、用License Server激活吧。可不,我这一天都在尝试着把Java版的JetBrains License Server port到Python,然而怎奈学艺不精,原理都搞清楚了,就是跑不过测试用例……???


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/mssql-mysql.html
喜欢 (16)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(9)个小伙伴在吐槽
  1. 有这篇文章是因为楼主不知道有个软件叫DB2DB 然后我其实还写了一个姐妹篇DB2File(没公开发布)
    coolcalf2018-12-09 21:04 回复
  2. 小伙子,你的图片防盗链挺厉害的。把rss都给防了。
    落格博客2017-10-13 01:00 回复
    • 呀怎么会?我的订阅器还是好好的能看见图的呀
      Benny小土豆2017-10-13 07:35 回复
      • inoreader的的的
        落格博客2017-10-13 17:58 回复
        • 可能是因为带了referer?
          Benny小土豆2017-10-13 19:01
  3. 我看了一下JetBrains的网站,他们好像有专门的数据库IDE DaraGrip: https://www.jetbrains.com/datagrip/
    布偶君2017-10-03 09:44 回复
    • 果真是程序员全家桶!
      Benny小土豆2017-10-03 10:12 回复
  4. navicat也可以,,
    null2017-09-28 14:17 回复
    • 你这名字应该叫<script>alert('null')</script>,navicat没有试过,不知道可行性怎样,隐隐约约感觉……还是JetBrains全家桶好:-)
      Benny小土豆2017-09-28 14:20 回复