V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
baiyekaslana
V2EX  ›  MySQL

关于 MYSQL 数据库迁移的求助

  •  1
     
  •   baiyekaslana · 262 天前 · 2785 次点击
    这是一个创建于 262 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想找个关于数据库迁移方面的知识,最好是热备份的,有什么推荐的书或者发布的帖子嘛
    公司现在是想这样
    场景:现在有 mysql5.7 数据库服务器 1 和 mysql5.7 数据库服务器 2 进行主从复制,上面的数据库有 db_a,db_b 。还有另一台 mysql5.7 数据库服务器 3 ,上面的数据库为 db_c,db_d 。
    需求:现在需要把数据库服务器 3 上的 db_c 和 db_d 迁移到数据库服务器 1 上。
    40 条回复    2024-03-08 13:40:49 +08:00
    Hyson2023
        1
    Hyson2023  
       262 天前
    1.用 debezium 或者 canal 之类的同步工具,但是要自己写消费端代码
    2.用阿里 DTS ,CloudCanal 之类的产品
    3.mysqldump
    baiyekaslana
        2
    baiyekaslana  
    OP
       262 天前
    @Hyson2023 现在使用的是 mysqldump,但是没办法热备份,一个数据库就 400 多个 G,恢复就要 4 天多,然后迁移完了之后再把这四天的数据导出 sql 再执行,这个方法有点麻烦就想找个有没有热备份的方法。之前热备份使用的是 xtrabackup ,但是现在要迁移的服务器本身就有数据库。没法使用这个做热备。您说的方法我查下看怎么弄。
    ChevalierLxc
        3
    ChevalierLxc  
       262 天前
    我想的方案是,从某个时间点先迁移数据,后面用 binlog 再恢复增量的,至于怎么去写。我不知道。看看其他大佬
    defunct9
        4
    defunct9  
       262 天前
    400 多个 G ,回复 4 天,不可能吧
    XyIsMy
        5
    XyIsMy  
       262 天前
    1.数据库 A 能不能停。如果能停,把 数据库 c (主) 和 数据库 a (从) 做一个主从。业务转移完后再切断主从

    2.不能停,考虑外部工具。比如 bifrost ,先做一个全量同步,同步完后开启增量同步,就可以了。业务转移完切断同步
    Jblue
        6
    Jblue  
       262 天前
    XyIsMy
        7
    XyIsMy  
       262 天前   ❤️ 1
    cheng6563
        8
    cheng6563  
       262 天前
    先全量备份,用 xtrabackup 或者直接 mysqldump 都行,记下备份开始的时间(或 binlog 位置)。
    然后用 binlog 开始跑后面的同步,这个软件或方案挺多的。
    dorothyREN
        9
    dorothyREN  
       262 天前   ❤️ 2
    哪用的着备份 binlog 啥的, 直接用 tidb 的 dm 工具,实时同步,完了把程序的 dsn 一改就完事了。
    我都在线迁移了好几次了
    baiyekaslana
        10
    baiyekaslana  
    OP
       261 天前
    @defunct9 用的是 mysqldump 和 mysql 命令回复的,确实 4 天还没好,今天早上查询命令时间太长连接不到 mysql,导致恢复 sql 的后台进程断了
    baiyekaslana
        11
    baiyekaslana  
    OP
       261 天前
    @XyIsMy 好的,我学下怎么弄
    baiyekaslana
        12
    baiyekaslana  
    OP
       261 天前
    @cheng6563 主要是要迁移的是阿里的云数据库 RDS ,就一个数据库服务。我看的应该是用不了 xtrabackup 吧
    defunct9
        13
    defunct9  
       261 天前
    开 ssh ,让我上去看看
    vczyh
        14
    vczyh  
       261 天前
    我的理解,这种情况只能通过逻辑备份来恢复,比如 mysqldump ,还有一楼的 debezium 之类的迁移工具和服务。
    vczyh
        15
    vczyh  
       261 天前   ❤️ 1
    既然用的是阿里的 RDS ,那可以了解一下阿里的数据库迁移服务。
    baiyekaslana
        16
    baiyekaslana  
    OP
       261 天前
    @defunct9 公司的,不敢😂
    baiyekaslana
        17
    baiyekaslana  
    OP
       261 天前
    @vczyh 我看到好像是只有迁移到阿里云的,给的方案比较详细。而且迁移服务应该是花钱买的,公司大概不同意
    defunct9
        18
    defunct9  
       261 天前
    @baiyekaslana 那只能你自己搞了
    baiyekaslana
        19
    baiyekaslana  
    OP
       261 天前
    @defunct9 公司的东西不敢外泄,谢谢你的好意了。
    Hyson2023
        20
    Hyson2023  
       261 天前   ❤️ 1
    @baiyekaslana 阿里的 DTS 能做全量及增量同步,全量同步是免费的,增量需要收费,费用不贵的
    baiyekaslana
        21
    baiyekaslana  
    OP
       261 天前
    @dorothyREN 之前忘了说是要迁移的是阿里云数据库 RDS,这个刚才大概看了下应该是要搭建 tidb 的集群,通过集群完成的实时同步功能。这个我理解的大概没法用在阿里云数据库 RDS 。不知道这个能否在别的服务器搭建 tidb 服务,远程连接到阿里云数据库。
    baiyekaslana
        22
    baiyekaslana  
    OP
       261 天前
    @Hyson2023 好的,那我去看看
    defunct9
        23
    defunct9  
       261 天前   ❤️ 1
    DTS 是可以的,前提你是用 ipsec 或者 vpn 打通阿里云和公司的网络,这样就可以了。这种方式搞过很多次
    goodryb
        24
    goodryb  
       261 天前
    既然是阿里云的 RDS ,那强烈推荐使用 DTS 去做,同步的时候注意选择好库,不要搞错; 另外注意下存储空间,别打爆了
    baiyekaslana
        25
    baiyekaslana  
    OP
       261 天前
    @goodryb 好的,现在正在试,400G 的库大概多长时间
    goodryb
        26
    goodryb  
       261 天前
    @baiyekaslana 如果是同 VPC ,那应该很快的,半天左右,全量+增量足够了
    kestrelBright
        27
    kestrelBright  
       261 天前
    flink?
    baiyekaslana
        28
    baiyekaslana  
    OP
       261 天前
    @goodryb 谢谢
    LostPrayers
        29
    LostPrayers  
       261 天前
    我之前迁移 40 个 G 的 mysql 数据库,是搜了几篇博客+ChatGPT🤣
    nextvay
        30
    nextvay  
       261 天前
    我们上云步骤
    1.旧数据库使用代理,代理后面挂载旧数据库
    2.开启 DTS 数据同步+增量同步,
    3.数据差不多了,凌晨某个时间点旧数据库开启只读,不准写入,此时切换代理挂载新数据库
    dorothyREN
        31
    dorothyREN  
       261 天前
    @baiyekaslana 不需要搭建 tidb 集群,只需要部署 tidm 就行了,dm 工具会自动同步上游数据到下游,上下游都是你自己配置的 mysql 地址
    chutianyao
        32
    chutianyao  
       260 天前
    @baiyekaslana 你们是不是用的机械硬盘,io 速度上不去导致的.
    我前天恢复 17G 的数据,使用机械盘,io 速度只有 10MBps; 后来换 SSD,速度到了 200MBps+,不到 1 小时就搞完了
    root71370
        33
    root71370  
       260 天前
    我来说一下我们的方案,第一步 mysqldump 全量数据,记录下 binlog 点位,第二步导入到新的 mysql 中,第三步通过主从根据第一步记录的 binlog 点位去消费达到增量同步,第四步关闭源实例,通知业务切换 dsn 。如果没有乱七八糟的存储过程触发器啥的,这一套还是能在生产跑的。
    liu35118665
        34
    liu35118665  
       260 天前
    1 、使用单表空间文件导入 InnoDB 表 https://dev.mysql.com/doc/refman/8.0/en/innodb-table-import.html
    2 、也可以配合 xtrabackup ,用 xtrabackup 备份表,之后直接拷贝表空间文件到目标位置
    liu35118665
        35
    liu35118665  
       260 天前
    @liu35118665 mysql5.7 应该也可以 https://dev.mysql.com/doc/refman/5.7/en/innodb-table-import.html 拷贝文件的方式速度应该是最快的
    fionasit007
        36
    fionasit007  
       260 天前
    我现在 CloudCanal ,不过你那么大的数据量我不清楚 CloudCanal 稳定不;要是阿里云的数据库或者在阿里云服务器搭建的数据库都可以用阿里云的 DTS
    baiyekaslana
        37
    baiyekaslana  
    OP
       259 天前
    @chutianyao 公司服务器确实用的机械盘,好久的机子了。都没换过配置
    baiyekaslana
        38
    baiyekaslana  
    OP
       259 天前
    @root71370 binlog 点位要怎么记,要迁移的数据库是不让停的,随时都有读写,binlog 不是随时换的嘛。而且记录 binlog 点位要在全量迁移的什么时候记才能和全量迁移的数据保持一致
    baiyekaslana
        39
    baiyekaslana  
    OP
       259 天前
    @fionasit007 现在就用的 DTS,但是有个库的表结构报错了,说是可能发生死锁啥的,都不知道该怎么处理。哎
    root71370
        40
    root71370  
       258 天前
    @baiyekaslana binlog 点位 在 mysqldump 的时候导出数据中就已经记录了,提取出来即可。把全量数据恢复到目标库之后,就可以对源库进行写入禁止操作了,期间产生的数据量通过 mysql 主从增量恢复,这个时候源库和目标库是一个同步的状态,业务直接改 dsn 重启就行了。当然要保证所有使用源库的统一切换,最安全的方案是先禁止源库的写入权限,这个时候等业务系统 dsn 统一切换到目标库之后,再把主从断开就行了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3157 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:23 · PVG 20:23 · LAX 04:23 · JFK 07:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.