请教 SQLServer 迁移到 MySQL 方案, 1W+DB

49 天前
 dreamswhite

公司是传统企业,一个十几年的系统,使用 SQLServer 存储数据。累积到现在已有 1W+ DB ,每个 DB 下 100+表。想全部迁移至 MySQL 。SQLServer 和 MySQL 部署在内网不同服务器,MySQL 操作系统为 Linux 。

已尝试的方案:

想问下有没有更好的方案?

3925 次点击
所在节点    数据库
53 条回复
akira
49 天前
这活。。大坑啊。。。技术验证都没验证的吧。
讲真, 数据迁移属于这个事情里面最最简单的部分了。
sql 改造,代码改造 那边要做的事情多了去了
charleschilips
49 天前
找个兼容 SQL server 的国产数据库
liuxey
49 天前
如果有国产化需求,有些数据库供应商采购的时候可以附加迁移服务
Bingchunmoli
49 天前
说实话之前有个国家项目(应该是省级)的数据库,SQLServer 很大,直接 navicat 迁的 mysql , 因为后台也改了所以还好一点。你这旧项目还在的话,能不动就不动是最好的方案吧
yinmin
49 天前
微软 sql server 和 mysql 的 SQL 语法不兼容的,软件需要重构工作量不低。

其实,你用工具跨数据库迁移,本质上也是读数据写数据。自己直接写一个迁移程序,不复杂。mysql 的 insert 支持一条命令插入多行记录的,你组成 500 行记录一条 insert ,迁移速度也很快的。
adoal
49 天前
建议不迁移。
adoal
49 天前
传统业务系统换数据库,往往不是换数据库的事。得重构应用层代码做适配。
wtks1
49 天前
mysql 可不是国产化数据库,你这么迁移了也是做白工
dreamswhite
49 天前
@Flourite 性能降级,怎么说?
chenzi0103
49 天前
可以给一个逻辑
1 ,首先使用代码先将 SQLServer 每个 db 下面的表的结构整理处理
2 ,然后将每个表的表结构通过 llm 转译成 mysql 的结构,并且保存起来
3 ,通过分布式的框架,每次将每个表的一部分数据保存下来,变成 parquet 文件
4 ,通过刚才保存的表的结构,使用一个分布式框架将 parquet 文件通过某种方式快速的插入到 mysql 数据库中。并且保存其中的记录
lsww
49 天前
有预算吗?帮你搞定
forgottencoast
49 天前
我 20 年前干过类似的,公司觉得 SQLServer 数据库性能不好,把 SQLServer 迁移到 Oracle 。
大几十个人干了大半年,每个功能模块的每个页面里面的 SQL 语句几乎都要改,至少要跑过一次。
dreamswhite
49 天前
@chenzi0103 llm 转表结构 + parquet 存数据,学到了🙇‍
fbzl
49 天前
SQLServer 藏了很多存储过程,触发器吧
yjd
48 天前
就像上面说的,不单单数据和表结构问题这 2 个导没啥大问题。一堆存储过程,触发器等等才是难弄的地方。
joyhub2140
48 天前
听楼上的,还是找信创的数据库吧,花钱有厂家兜底,要是自己来,责任太重了,而且容易出锅。

十几年的老系统动起来也伤筋动骨,而且还是最核心的 DB 层。
mikewang
48 天前
需要国产化的话,找对应厂商做迁移最好。http://www.itsec.gov.cn/aqkkcp/cpgg/
导数据是一部分,SQL 方言和计算表现不一样也会产生各种兼容性问题,需要慎重考虑的。
noparking188
48 天前
之前做过方案,将三千张表、10TB 数据从 SQL Server 迁移到 Amazon Redshift 。

https://zhiweio.notion.site/10TB-SQL-Server-Amazon-Redshift-1aeb24862723455d919de6edf035bdeb
借助 Linux 管道文件加速 SQL Server 数据迁移 Redshift

如何将 10TB 数据从 SQL Server 迁移到 Amazon Redshift
https://zhiweio.notion.site/Linux-SQL-Server-Redshift-f5c2b5dcdeb646f793de494954244a8a

这个工具是给 bcp 套了层壳,方便将 SQL Server 数据最高效率下载、切块、压缩并上传的 S3:
https://github.com/zhiweio/StreamXfer

这个方案能够支撑每天全量迁移一遍 SQL Server 全库 10TB 数据到 Amazon Redshift 。

参考建议:
1. 表结构迁移可以基于 sqlglot 库写一个建表语句翻译器,先迁移全部表结构。
2. SQL Server 数据导出用 bcp ,或者用封装的 StreamXfer ,记得一定用 JSON 格式,有一些坑;
3. 导入 JSON 到 MySQL 用 MySQL Shell Utilities ,https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-json.html ,这个支持管道文件,可以实现 SQL Server -> bcp -> mysqlsh -> MySQL ,效率极高。
4. Stored Procedure 的迁移需要业务开发去挨个翻译、测试 SQL 。

如有需要可以私聊
andytao
48 天前
袋鼠正在完善同步功能,把你反馈的问题作为需求收录了:
https://gitee.com/dbkangaroo/kangaroo/issues/IAUVOC

相信很快就能给予更好的支持了,敬请关注。
oamu
48 天前
@idragonet #16
@wtks1 #28 一看就是没呆过国企,没见过“兼容” mysql 的国产数据库。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1077367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX