美文网首页
mysql超大表不中断不锁表如何操作,pt-online-sch

mysql超大表不中断不锁表如何操作,pt-online-sch

作者: chichoyi | 来源:发表于2022-11-27 11:37 被阅读0次

    背景

    线上有一条语句查询太慢,定位到的是关联字段没加索引,需要加索引。
    但是该字段是varchar类型,而且前期没有考虑清楚,varchar定了1000,太长是加不了索引的。
    可是该数据表的数据超过六百万,直接修改字段再加索引肯定是很慢而且会被锁表,bd之后,选择了pt-osc

    注意点

    • 还是需要尽量在业务低峰期做,将影响降到最低
    • 需要确认表必须包含主键或者唯一索引
      工具会创建触发器,所以原表上不能有触发器
      有外键的表需要注意使用参数--alter-foreign-keys-method(现在业务上不建议表中外键关联,建议在业务中控制)

    原理

    • 首先它会新建一张一模一样的表,表名一般是_new后缀
    • 然后在这个新表执行更改字段操作
    • 然后在原表上加三个触发器,DELETE/UPDATE/INSERT,将原表中要执行的语句也在新表中执行
    • 最后将原表的数据拷贝到新表中,然后替换掉原表

    安装

    安装比较简单,直接官网安装,不要在数据库所在服务器安装操作,在本地其实也可以的,pa网络断的话,去线上其他服务器也是可以的。

    wget https://downloads.percona.com/downloads/percona-toolkit/3.3.1/source/tarball/percona-toolkit-3.3.1.tar.gz
    
    tar -xvf percona-toolkit-3.3.1.tar.gz
    
    #安装依赖
    yum install perl-DBI
    yum install perl-DBD-MySQL
    yum install perl-Time-HiRes
    yum install perl-IO-Socket-SSL
    yum -y install perl-Digest-MD5
    
    #测试可用
    ./pt-online-schema-change --help
    

    操作

    • 参数字段含义


      image.png

    具体操作

    #添加字段
    ./pt-online-schema-change --user=xxxx --password=xxxx  --host=xxx.xxx.xxx.xxxx  --alter "add column  group_id bigint(20) not NULL default '0'  comment 'test' " P=30306,D=h_pushcenter,t=h_message  --charset=utf8 --no-version-check --print --execute
    

    参考文章:
    https://zhuanlan.zhihu.com/p/384633693

    相关文章

      网友评论

          本文标题:mysql超大表不中断不锁表如何操作,pt-online-sch

          本文链接:https://www.haomeiwen.com/subject/kajhfdtx.html