• MySQL在线修改表结构-PerconaTookit工具


    在线修改表结构必须慎重

    • 在业务系统 运行 过程中随意删改字段,会 造成重大事故。

    • 常规的做法是:业务停机,再 维护表结构
      比如:12306 凌晨 0 点到早上 7 点是停机维护

    • 如果是不影响正常业务的表结构是允许在线修改的。
      比如:int 类型不够用了,要缓存 bigint、有唯一性约束,要去掉。这不会影响线上的正在执行的数据

    alter table 修改表结构的弊端

    • 表级锁
      修改表结构会锁表,因此在修改表结构时,影响表的写入操作;
      数据越多,锁表时间越长。
    • 修改失败,还原表结构,耗时长
      如果修改表结果失败,必须还原表结构,所以耗时更长;
      比如:添加一个唯一性约束,结果发现很多数据有控制,无法添加进来了,这个时候就只能还原表结构
    • 大数据表记录多,修改表结构锁表时间很久

    使用 PerconaTookit 工具

    由于 alter table 线上修改表结构有诸多弊端,但是 PerconaTookit 提供了一个开源的线上修改表结构的工具。
    其中一个名为 pt-online-schema-change 的工具可以完成在线修改表结构。

    在线修改表结构的原理

    pt-online-schema-change 是如何做到不锁表修改表结构的?
    我要修改 order 表的结构, pt-online-schema-change 会这样做:
    1.复制一份 order 表结构
    2.在这个新表的修改表结构
    3.同步执行数据拷贝

    修改完成之后,会在原来表上增加触发器,新的操作数据增删改查都会同步到新的表中,
    同时会把原来表的数据拷贝到新表中。
    当数据拷贝完之后,且原表没有新的数据写入时,把原表删除,把新表名称修改为原表名称
    在这里插入图片描述

    安装 PerconaTookit 依赖包

    安装第三方依赖包

    yum install -y perl-DBI
    yum install -y perl-DBD-mysql
    yum install -y perl-IO-Socket-SSL
    yum install -y perl-Digest-MD5
    yum install -y perl-TermReadKey
    
    • 1
    • 2
    • 3
    • 4
    • 5

    安装 PerconaTookit 工具

    rpm -ivh percona-toolkit-3.0.13-1.el7.x86_64.rpm
    rpm -ivh percona-toolkit-debuginfo-3.0.13-1.el7.x86_64.rpm
    
    • 1
    • 2

    pt-online-schema-change 用法

    pt-online-schema-change OPTIONS DSN
    
    • 1

    在这里插入图片描述

    实践
    在执行前还需要修改下密码认证方式,因为该工具不支持 MySQL8 新的默认认证方式,将认证方式改成低版本的方式

    alter user 'root'@'%' identified by 'password' password expire never;
    alter user 'root'@'%' identified with mysql_native_password by '123456';
    
    • 1
    • 2

    把客户收货地址表中的 name 字段改成 varchar(20)

    pt-online-schema-change --host=192.168.121.142 --port=3306 --user=root --password=123456 --alter "modify name varchar(20) not null comment '收货人'" D=neti,t=t_customer_address --print --execute
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    百趣代谢组学资讯:全基因组代谢组学模型揭示长寿秘诀:脂肪酸氧化升高
    对于分辨率很高的图片(1205*1205)使用什么样的深度学习模型对其进行回归预测更准确高效一点
    对递归的进一步理解
    .npmrc文件,单个项目的npm配置
    等保: Postgresql配置ssl链接
    天佑药品销售管理系统
    关于SQLSERVER触发器的一个问题
    微信公众号推送封面模板制作,一步步教你完成高质量封面图
    spring推断构造函数
    idea类和方法配置注释模板
  • 原文地址:https://blog.csdn.net/qq_46548855/article/details/133439750