• mysql日常~gh-ost使用


    一 对表的基本要求
        1 表必须要有主键 2 binlog必须是ROW格式 3 表不能有外键/触发器约束
    二 基本过程
       1 检测实例基本参数是否符合
       2 添加binlog监听,目标主库/从库
       3 创建_xxx_ghc表(记录操作步骤) _xxx_gho表(全新表)
       4 同时进行以下两个工作
          对原表进行 row copy->_xx_gho
          对新表进行 binlog apply->xx_gho
          针对未拷贝的数据 binlog在新表不应用,针对已拷贝的数据,会应用binlog
       5 cut-over阶段
         0 首先会创建一个哨兵表__b__xx_del(日后的备份表)
         1 当binlog应用完成后先锁定源表和哨兵表
         2 进入rename交换 表:rename 源表 to 源_del表,gho表 to 源表。
       6 清理ghc表。
    三 区别
       1 gh-ost 放弃了触发器,使用 binlog 来同步实现实时数据的变更
       2 gh-ost的效率低于pt-osc,因为pt-osc是多线程
       3 两者工具上对于负载的控制有很多相通的参数
    四 特性
      1 原子性的两阶段切换方案
         pt-osc在rename阶段可能会有一小段时间提示不存在表,  gh-ost 解决的方式
        1 rename操作优先级高于DML操作,
        2 创建两个会话请求,一个会话请求执行lock哨兵表和原表 另一个会话执行rename操作,
          当第一个会话认为达到rename情况的时候会删掉哨兵表并且解锁表,因为rename操作优先级高于DML操作,所以另一个会话请求rename会被优先执行,等两者弄完,其他的程序       请求就能正常运行了
    五 常用参数
       1 --allow-on-master 直接在主库执行必须添加
       2 --chunk-size int 默认每次的行数
       3 --initially-drop-ghost-table 在本次操作前删除可能存在的ghost表(可能之前留下的),默认如果存在就中断
       4 --initially-drop-old-table 在本次操作前删除old表(可能之前没有删除),默认如果存在中断、
       5 --initially-drop-socket-file 删除socket文件
       6 --ok-to-drop-table DDL完成后自动删除old表 默认不删除
       7 --max-load=Threads_connected=M --critical-load=Threads_connected=N(负载组合)
       8 -assume-rbr 显示告诉gh-ost日志格式是row格式,如果没有该参数,gh-ost每次都会设置row格式并重启复制,需要用户有super权限
       9 -execute 执行
    六 组合
       --max-load=Threads_connected=M --critical-load=Threads_connected=N --chunk-size=1000 --initially-drop-ghost-table --initially-drop-old-table --initially-drop-socket-file --   allow-on-master -execute --assume-rbr
    七 备注
       2 当执行成功后会在日志结尾打印success字样

  • 相关阅读:
    装饰器
    函数对象与闭包
    名称空间与作用域
    函数的参数
    函数的基本使用
    ${}与#{}的区别
    thymeleaf之日期格式化
    template might not exist or might not be accessible by any of the configured Template Resolvers
    springboot使用@Scheduled之cron表达式详解
    自定义springboot项目启动图案
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/13750008.html
Copyright © 2020-2023  润新知