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

2024-10-02 09:12:22 +08:00
 dreamswhite

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

已尝试的方案:

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

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

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

十几年的老系统动起来也伤筋动骨,而且还是最核心的 DB 层。
mikewang
2024-10-02 19:50:25 +08:00
需要国产化的话,找对应厂商做迁移最好。http://www.itsec.gov.cn/aqkkcp/cpgg/
导数据是一部分,SQL 方言和计算表现不一样也会产生各种兼容性问题,需要慎重考虑的。
noparking188
2024-10-02 21:01:30 +08:00
之前做过方案,将三千张表、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 。

如有需要可以私聊
9dP06m83vIV00l72
2024-10-02 21:26:26 +08:00
袋鼠正在完善同步功能,把你反馈的问题作为需求收录了:
https://gitee.com/dbkangaroo/kangaroo/issues/IAUVOC

相信很快就能给予更好的支持了,敬请关注。
oamu
2024-10-02 22:16:12 +08:00
@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