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存储引擎,切源库与目标库版本及表结构一样
     
  • 相关阅读:
    hbase 由于zookeeper问题导致连接失败问题
    Python 判断文件/目录是否存在
    mysql5.7设置默认的字符集
    mysql 提示ssl问题
    Ubuntu 安装MySQL报共享库找不到
    hbase 监控指标项
    大量数据通过Phoenix插入到hbase报错记录(2)
    通过phoenix导入数据到hbase出错记录
    mysql5.7 之 sql_mode=only_full_group_by问题
    Hadoop 在启动或者停止的时候需要输入yes确认问题
  • 原文地址:https://www.cnblogs.com/liangshaoye/p/14118757.html
Copyright © 2011-2022 走看看