dreamswhite
V2EX  ›  数据库

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

  •  
  •   dreamswhite · Oct 2, 2024 · 7380 views
    This topic created in 771 days ago, the information mentioned may be changed or developed.

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

    已尝试的方案:

    • Navicat Premium: 勉强使用中。优点是一次可以设置迁移多个 DB (迁移依旧是串行),缺点是不完全成功率(一个 DB 下全部表迁移成功算完全成功)大概 50%
    • MySQL Workbench: 放弃,一次只能设置迁移一个 DB ,需要操作的次数太多
    • TapData: 放弃,一次只能设置迁移一个 DB ,需要操作的次数太多

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

    53 replies  •  2024-10-05 09:16:17 +08:00
    youisme
    youisme
    Oct 2, 2024
    1
    正儿八经的找个 dba 或者技术顾问来做这个事情吧。。。
    ferock
    ferock
    Oct 2, 2024 via iPhone
    2
    花点钱…别那么抠
    dreamswhite
    dreamswhite
    OP
    Oct 2, 2024
    3
    @ferock 可以花钱,花钱的话应该找什么样的人或者厂商?
    sagaxu
    sagaxu
    Oct 2, 2024 via Android
    4
    用户和权限,表结构,数据,存储过程,触发器等等,每一项都可能遇到兼容性问题,不是迁完不报错就算成功的。这事情需要专业的公司提供服务。
    liaojl
    liaojl
    Oct 2, 2024 via iPhone
    5
    可以花钱的话,还是建议续费 SQL sever 吧,这看起来工作量就不小,还有数据库的兼容性问题,以及后续的各种测试。
    ferock
    ferock
    Oct 2, 2024 via iPhone
    6
    @dreamswhite #3

    招个 dba , 或者找个公司做数据改造,或者,回到原来
    billzhuang
    billzhuang
    Oct 2, 2024 via iPhone
    7
    为什么要迁移到 mysql ?
    june4
    june4
    Oct 2, 2024
    8
    可怕为啥会有 1w 个 db 这么多,难道是结构都是一样的,只是数据新旧不同,那感觉还好,一个能成了就行
    wangee
    wangee
    Oct 2, 2024
    9
    找专业的 DBA 吧,这数据量太哈人了
    beneo
    beneo
    Oct 2, 2024
    10
    找 https://www.clougence.com/ 公司帮你弄吧
    dreamswhite
    dreamswhite
    OP
    Oct 2, 2024
    11
    @billzhuang 国产化需求
    dreamswhite
    dreamswhite
    OP
    Oct 2, 2024
    12
    @june4 历史原因,最开始的代码就写成了这个样子 = =
    beneo
    beneo
    Oct 2, 2024
    13
    国产化 更不应该 用 MySQL ,去弄下 PolarDB ,信创数据库
    qping
    qping
    Oct 2, 2024 via Android
    14
    这个需要一段时间吧,同步完数据不需要测试,试运行一段时间?这个时间差内产生的心属于如何处理?

    你需要先制定一个迁移方案,而不只是迁移工具
    qping
    qping
    Oct 2, 2024 via Android
    15
    纠正:
    这个时间差内产生的心属于如何处理?
    ->
    这个时间差内产生的新数据如何处理?
    idragonet
    idragonet
    Oct 2, 2024
    16
    Mysql 不是国产数据库。
    dV9zZM1wROuBT16X
    dV9zZM1wROuBT16X
    Oct 2, 2024
    17
    这迁移。。。性能降级、功能也对不上吧
    wheat0r
    wheat0r
    Oct 2, 2024
    18
    @dreamswhite #11 那你迁了白迁
    realpg
    realpg
    Oct 2, 2024
    19
    迁移预算几位数?
    qfdk
    qfdk
    PRO
    Oct 2, 2024 via iPhone
    20
    不大靠谱. 为社么这么说... 我司就有一个 erp.... 大概 3k 多的表吧. 里面的 process 也都要重写... 工作量太大了. 甚至有些祖传脚本..... 然后业务代码里面有些用到直接执行 sql 代码的地方... 有些 语句并不通用. 要是用的 orm 可能没有这样的问题... 但是有些 orm 搞不定的真的是语句....
    akira
    akira
    Oct 2, 2024
    21
    这活。。大坑啊。。。技术验证都没验证的吧。
    讲真, 数据迁移属于这个事情里面最最简单的部分了。
    sql 改造,代码改造 那边要做的事情多了去了
    charleschilips
    charleschilips
    Oct 2, 2024
    22
    找个兼容 SQL server 的国产数据库
    auin
    auin
    Oct 2, 2024
    23
    如果有国产化需求,有些数据库供应商采购的时候可以附加迁移服务
    Bingchunmoli
    Bingchunmoli
    Oct 2, 2024 via Android
    24
    说实话之前有个国家项目(应该是省级)的数据库,SQLServer 很大,直接 navicat 迁的 mysql , 因为后台也改了所以还好一点。你这旧项目还在的话,能不动就不动是最好的方案吧
    yinmin
    yinmin
    Oct 2, 2024 via iPhone
    25
    微软 sql server 和 mysql 的 SQL 语法不兼容的,软件需要重构工作量不低。

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

    十几年的老系统动起来也伤筋动骨,而且还是最核心的 DB 层。
    mikewang
    mikewang
    Oct 2, 2024
    37
    需要国产化的话,找对应厂商做迁移最好。http://www.itsec.gov.cn/aqkkcp/cpgg/
    导数据是一部分,SQL 方言和计算表现不一样也会产生各种兼容性问题,需要慎重考虑的。
    noparking188
    noparking188
    Oct 2, 2024
    38
    之前做过方案,将三千张表、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
    9dP06m83vIV00l72
    Oct 2, 2024
    39
    袋鼠正在完善同步功能,把你反馈的问题作为需求收录了:
    https://gitee.com/dbkangaroo/kangaroo/issues/IAUVOC

    相信很快就能给予更好的支持了,敬请关注。
    oamu
    oamu
    Oct 2, 2024
    40
    @idragonet #16
    @wtks1 #28 一看就是没呆过国企,没见过“兼容” mysql 的国产数据库。
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Oct 2, 2024
    41
    @chenzi0103 洗洗睡吧,光数据类型转换就够你喝一壶的,我只能说隔行如隔山
    bugmakerxs
    bugmakerxs
    Oct 2, 2024
    42
    问问阿里云 dts 有没有私有化解决方案
    bugmakerxs
    bugmakerxs
    Oct 2, 2024
    44
    或者先同步到云上 mysql ,再自己从云上 mysql 同步到本地 mysql 。
    forty
    forty
    Oct 3, 2024
    45
    如果只是表和视图,其实很容易了,如果还有存储过程,那估计没法自动转换了。
    老的系统,能跑就尽量不动,是至理名言。搞出问题是大概率的,修修补补再折腾个半年都算是正常的。
    rqYzyAced2NbD8fw
    rqYzyAced2NbD8fw
    Oct 3, 2024
    46
    @dreamswhite #11 mysql 怎么也成国产的了
    wtks1
    wtks1
    Oct 3, 2024
    47
    @oamu #39 兼容 mysql 的国产数据库很多,但 mysql 本身可是不算国产化数据库的,根本过不了国产化验收,没干过这行的就别瞎 bb 了
    bthulu
    bthulu
    Oct 3, 2024
    48
    仅仅是迁移数据的话, 很简单, 直接用阿里云的 DTS 功能就行了, 可以在不中断业务的情况下同步数据到 MYSQL.
    oamu
    oamu
    Oct 3, 2024
    49
    @wtks1 #47 搞笑,某个鸭子数据库,支持 mysql 所有操作,支持 mysql 的所有工具,那它就是 mysql ,我把它当作 mysql ,并没说我一定实际使用 mysql 。某个 xx 系统完美兼容安卓,应用开发也完全和安卓的一样,但你敢说它不是国产系统?
    guiyumin
    guiyumin
    Oct 3, 2024
    50
    我觉得你别迁移
    对你没任何好处
    keenkiller
    keenkiller
    Oct 3, 2024 via Android
    51
    国产化别用 mysql ,找个兼容 sql server 的
    alinwu05
    alinwu05
    Oct 3, 2024
    52
    用过一个工具叫 sqllines, 便宜好用!
    dreamswhite
    dreamswhite
    OP
    Oct 5, 2024
    53
    @noparking188 能麻烦加下我的 v 吗: dreamswhite
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   955 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 19:54 · PVG 03:54 · LAX 11:54 · JFK 14:54
    ♥ Do have faith in what you're doing.