
公司是传统企业,一个十几年的系统,使用 SQLServer 存储数据。累积到现在已有 1W+ DB ,每个 DB 下 100+表。想全部迁移至 MySQL 。SQLServer 和 MySQL 部署在内网不同服务器,MySQL操作系统为 Linux 。
已尝试的方案:
想问下有没有更好的方案?
1 youisme 2024 年 10 月 2 日 正儿八经的找个 dba 或者技术顾问来做这个事情吧。。。 |
2 ferock PRO 花点钱…别那么抠 |
3 dreamswhite OP @ferock 可以花钱,花钱的话应该找什么样的人或者厂商? |
4 sagaxu 2024 年 10 月 2 日 via Android 用户和权限,表结构,数据,存储过程,触发器等等,每一项都可能遇到兼容性问题,不是迁完不报错就算成功的。这事情需要专业的公司提供服务。 |
5 liaojl 2024 年 10 月 2 日 via iPhone 可以花钱的话,还是建议续费 SQL sever 吧,这看起来工作量就不小,还有数据库的兼容性问题,以及后续的各种测试。 |
6 ferock PRO |
7 billzhuang 2024 年 10 月 2 日 via iPhone 为什么要迁移到 mysql ? |
8 june4 2024 年 10 月 2 日 可怕为啥会有 1w 个 db 这么多,难道是结构都是一样的,只是数据新旧不同,那感觉还好,一个能成了就行 |
9 wangee 2024 年 10 月 2 日 找专业的 DBA 吧,这数据量太哈人了 |
10 beneo 2024 年 10 月 2 日 找 https://www.clougence.com/ 公司帮你弄吧 |
11 dreamswhite OP @billzhuang 国产化需求 |
12 dreamswhite OP @june4 历史原因,最开始的代码就写成了这个样子 = = |
13 beneo 2024 年 10 月 2 日 国产化 更不应该 用 MySQL ,去弄下 PolarDB ,信创数据库 |
14 qping 2024 年 10 月 2 日 via Android 这个需要一段时间吧,同步完数据不需要测试,试运行一段时间?这个时间差内产生的心属于如何处理? 你需要先制定一个迁移方案,而不只是迁移工具 |
15 qping 2024 年 10 月 2 日 via Android 纠正: 这个时间差内产生的心属于如何处理? -> 这个时间差内产生的新数据如何处理? |
16 idragonet 2024 年 10 月 2 日 Mysql 不是国产数据库。 |
17 dV9zZM1wROuBT16X 2024 年 10 月 2 日 这迁移。。。性能降级、功能也对不上吧 |
18 wheat0r 2024 年 10 月 2 日 @dreamswhite #11 那你迁了白迁 |
19 realpg PRO 迁移预算几位数? |
20 qfdk PRO 不大靠谱. 为社么这么说... 我司就有一个 erp.... 大概 3k 多的表吧. 里面的 process 也都要重写... 工作量太大了. 甚至有些祖传脚本..... 然后业务代码里面有些用到直接执行 sql 代码的地方... 有些 语句并不通用. 要是用的 orm 可能没有这样的问题... 但是有些 orm 搞不定的真的是语句.... |
21 akira 2024 年 10 月 2 日 这活。。大坑啊。。。技术验证都没验证的吧。 讲真, 数据迁移属于这个事情里面最最简单的部分了。 sql 改造,代码改造 那边要做的事情多了去了 |
22 charleschilips 2024 年 10 月 2 日 找个兼容 SQL server 的国产数据库 |
23 liuxey 2024 年 10 月 2 日 如果有国产化需求,有些数据库供应商采购的时候可以附加迁移服务 |
24 Bingchunmoli 2024 年 10 月 2 日 via Android 说实话之前有个国家项目(应该是省级)的数据库,SQLServer 很大,直接 navicat 迁的 mysql , 因为后台也改了所以还好一点。你这旧项目还在的话,能不动就不动是最好的方案吧 |
25 yinmin 2024 年 10 月 2 日 via iPhone 微软 sql server 和 mysql 的 SQL 语法不兼容的,软件需要重构工作量不低。 其实,你用工具跨数据库迁移,本质上也是读数据写数据。自己直接写一个迁移程序,不复杂。mysql 的 insert 支持一条命令插入多行记录的,你组成 500 行记录一条 insert ,迁移速度也很快的。 |
26 adoal 2024 年 10 月 2 日 建议不迁移。 |
27 adoal 2024 年 10 月 2 日 传统业务系统换数据库,往往不是换数据库的事。得重构应用层代码做适配。 |
28 wtks1 2024 年 10 月 2 日 mysql 可不是国产化数据库,你这么迁移了也是做白工 |
29 dreamswhite OP @Flourite 性能降级,怎么说? |
30 chenzi0103 2024 年 10 月 2 日 可以给一个逻辑 1 ,首先使用代码先将 SQLServer 每个 db 下面的表的结构整理处理 2 ,然后将每个表的表结构通过 llm 转译成 mysql 的结构,并且保存起来 3 ,通过分布式的框架,每次将每个表的一部分数据保存下来,变成 parquet 文件 4 ,通过刚才保存的表的结构,使用一个分布式框架将 parquet 文件通过某种方式快速的插入到 mysql 数据库中。并且保存其中的记录 |
31 lsww 2024 年 10 月 2 日 有预算吗?帮你搞定 |
32 forgottencoast 2024 年 10 月 2 日 我 20 年前干过类似的,公司觉得 SQLServer 数据库性能不好,把 SQLServer 迁移到 Oracle 。 大几十个人干了大半年,每个功能模块的每个页面里面的 SQL 语句几乎都要改,至少要跑过一次。 |
33 dreamswhite OP @chenzi0103 llm 转表结构 + parquet 存数据,学到了 |
34 fbzl 2024 年 10 月 2 日 via iPhone SQLServer 藏了很多存储过程,触发器吧 |
35 yjd 2024 年 10 月 2 日 就像上面说的,不单单数据和表结构问题这 2 个导没啥大问题。一堆存储过程,触发器等等才是难弄的地方。 |
36 nxforce 2024 年 10 月 2 日 听楼上的,还是找信创的数据库吧,花钱有厂家兜底,要是自己来,责任太重了,而且容易出锅。 十几年的老系统动起来也伤筋动骨,而且还是最核心的 DB 层。 |
37 mikewang 2024 年 10 月 2 日 需要国产化的话,找对应厂商做迁移最好。http://www.itsec.gov.cn/aqkkcp/cpgg/ 导数据是一部分,SQL 方言和计算表现不一样也会产生各种兼容性问题,需要慎重考虑的。 |
38 noparking188 2024 年 10 月 2 日 之前做过方案,将三千张表、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 。 如有需要可以私聊 |
39 9dP06m83vIV00l72 2024 年 10 月 2 日 |
41 F281M6Dh8DXpD1g2 2024 年 10 月 2 日 @chenzi0103 洗洗睡吧,光数据类型转换就够你喝一壶的,我只能说隔行如隔山 |
42 bugmakerxs 2024 年 10 月 2 日 问问阿里云 dts 有没有私有化解决方案 |
43 bugmakerxs 2024 年 10 月 2 日 |
44 bugmakerxs 2024 年 10 月 2 日 或者先同步到云上 mysql ,再自己从云上 mysql 同步到本地 mysql 。 |
45 forty 2024 年 10 月 3 日 如果只是表和视图,其实很容易了,如果还有存储过程,那估计没法自动转换了。 老的系统,能跑就尽量不动,是至理名言。搞出问题是大概率的,修修补补再折腾个半年都算是正常的。 |
46 rqYzyAced2NbD8fw 2024 年 10 月 3 日 @dreamswhite #11 mysql 怎么也成国产的了 |
47 wtks1 2024 年 10 月 3 日 @oamu #39 兼容 mysql 的国产数据库很多,但 mysql 本身可是不算国产化数据库的,根本过不了国产化验收,没干过这行的就别瞎 bb 了 |
48 bthulu 2024 年 10 月 3 日 仅仅是迁移数据的话, 很简单, 直接用阿里云的 DTS 功能就行了, 可以在不中断业务的情况下同步数据到 MYSQL. |
49 oamu 2024 年 10 月 3 日 @wtks1 #47 搞笑,某个鸭子数据库,支持 mysql 所有操作,支持 mysql 的所有工具,那它就是 mysql ,我把它当作 mysql ,并没说我一定实际使用 mysql 。某个 xx 系统完美兼容安卓,应用开发也完全和安卓的一样,但你敢说它不是国产系统? |
50 guiyumin 2024 年 10 月 3 日 我觉得你别迁移 对你没任何好处 |
51 tairan2006 2024 年 10 月 3 日 via Android 国产化别用 mysql ,找个兼容 sql server 的 |
52 alinwu05 2024 年 10 月 3 日 用过一个工具叫 sqllines, 便宜好用! |
53 dreamswhite OP @noparking188 能麻烦加下我的 v 吗: dreamswhite |