zoukankan      html  css  js  c++  java
  • 体验一下5分钟快速迁移mysql近亿数据量大表的速度!!!

    案例场景:

      需求将 源库 A服务器mysql实例下日志表t_service_log 迁移到 目标库  B 服务器 mysql实例下

      t_server_log

      

       数据量:

      

     详细操作步骤:

      1、在服务器B 目标库下 创建表结构 并执行 ALTER TABLE t_service_log DISCARD TABLESPACE;

      此时表 t_service_log  只剩下 frm 文件
      

       2. 源库,开启 2 个会话

        a)  session1:执行 FLUSH TABLES t_service_log FOR EXPORT ,该命令会对 t_service_log  加锁,将 t_service_log  的脏数据从 buffer
          pool 同步到表文件,同时新生成 1 个文件 t_service_log .cfg ,该文件存储了表的数据字典信息
        b)  session2:保持 session1 打开状态,此时将 t_service_log.cfg 和 t_service_log.ibd 远程传输到目标库的数据目录,
          如果目标库是主从结构,需要分别传输到主从两个实例,传输完毕后修改属主为 mysql:mysql
          内网传输可采用 nc 隧道模式 ,30G 传输完成大约在3分钟左右完成
          

          c)  源库,session1 执行 unlock tables ,解锁表 t_service_log ,此时 t_service_log 恢复正常读写

        d) 目标库,执行 ALTER TABLE t_service_log IMPORT TABLESPACE ,如果是主从结构,只需要在主库执行即可
          

        e)  此时目标库 t_service_log  已可用,迁移完成

                          

     总结:

        此次利用 mysql 可传输复制表空间方案,复制大表 t_service_log 到目录库 整个过程耗时在 5分钟左右  ,主要耗时在 传输 ibd 文件
       耗时3分钟左右与 目标库 "ALTER TABLE t_service_log IMPORT TABLESPACE " 耗时 2分钟左右;对比dump+source sql 方案在时间成本上有大利
       
        缺点:在源库上需要锁表 传输ibd文件的时间;所以对于业务低峰期或日志表可考虑使用,值适用innodb存储引擎,切源库与目标库版本及表结构一样
     
  • 相关阅读:
    my first android test
    VVVVVVVVVV
    my first android test
    my first android test
    my first android test
    ini文件
    ZZZZ
    Standard Exception Classes in Python 1.5
    Python Module of the Week Python Module of the Week
    my first android test
  • 原文地址:https://www.cnblogs.com/liangshaoye/p/14118757.html
Copyright © 2011-2022 走看看