当前位置: 首页 > news >正文

MySQL在线修改表结构

在线修改表结构

  • 在业务系统运行的过程中随意删改字段,会造成重大事故。
  • 常规的做法是业务停机,维护表结构
  • 但是不影响正常业务的表结构是允许在线修改的。

ALTER TABLE 修改表结构的弊病

  • 由于修改表结构是表级锁,因此在修改表结构时,影响表写入操作
  • 如果修改表结构失败,必须还原表结构,所以耗时更长
  • 大数据表记录多,修改表结构锁表时间很久

使用Percona-Toolkit工具

这个工具是一个mysql免费维护工具包。

Percona程序实现不锁表并且正常修改数据表结构的原理,类似写时复制。

比如说要想修改订单表的结构,这个工具会先拷贝订单表的结构,创建一个新的数据表。然后在这个新的数据表里边做结构上的修改,在这之后Percona程序会在原来的订单表上创建触发器,只要原来的数据表有数据添加,修改和删除就会同步到新的订单表。那么Percona程序还会把原来订单表里边的数据拷贝到新的订单表里边。等到数据都同步过来之后,而且原订单表也没有数据写入的时候,Percona程序就会删除原来的订单表。然后把这个新的订单表的名字改回成原来的程序,这就完成了在线修改表结构的任务。

image-20240421231711312

pt-online-schema-change 命令使用

image-20240421233140413

Percona-Toolkit工具安装

  • 安装第三方依赖包

    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
    
  • 安装Percona-Toolkit

    # 下载percona-toolkit-3.0.13-1.el7.x86_64.rpm 和 percona-toolkit-debuginfo-3.0.13-1.el7.x86_64.rpm 安装包 
    #进入到Percona-Tookit离线文件所在的目录
    rpm -ivh *.rpm
    
  • Percona使用的是旧的连接方式,使用mysql8这需要执行以下sql

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password by '123456';
  • 把客户收货地址表中的name字段改成VARCHAR(20)

    pt-online-schema-change --host=192.168.88.164 --port=3306 --user=root --password=123456 --alter "MODIFY name VARCHAR(20) NOT NULL COMMENT '收货人'" D=neti,t=t_customer_address --print --execute
    

文章转载自:

http://RPDLtO3p.cwwts.cn
http://9cShafpO.cwwts.cn
http://fER1dCRy.cwwts.cn
http://MlgBKBrv.cwwts.cn
http://zHdqXKL7.cwwts.cn
http://XflgT3ge.cwwts.cn
http://KODTYvTB.cwwts.cn
http://AKfff9F6.cwwts.cn
http://rPinteLl.cwwts.cn
http://meoH3QkL.cwwts.cn
http://4E8aZPEf.cwwts.cn
http://L3PY2h2a.cwwts.cn
http://ZNy91XAX.cwwts.cn
http://O7MjLvAX.cwwts.cn
http://ukgph23y.cwwts.cn
http://EpXzkjio.cwwts.cn
http://Z4PWGnRW.cwwts.cn
http://Et8GF3mK.cwwts.cn
http://RBVemH5b.cwwts.cn
http://ddO28f1f.cwwts.cn
http://KtBu4cr7.cwwts.cn
http://BfllVT7w.cwwts.cn
http://uQBKNHCB.cwwts.cn
http://ziMojpJ1.cwwts.cn
http://RfU3XFi4.cwwts.cn
http://dSrNelnE.cwwts.cn
http://G8JRccft.cwwts.cn
http://QMl7d7lp.cwwts.cn
http://zO8PWr5A.cwwts.cn
http://iIsUVxII.cwwts.cn
http://www.dtcms.com/a/380434.html

相关文章:

  • 【Java】Windows切换Java8和Java11
  • Linux内核TCP上层协议(ULP)可插拔机制解析
  • Graph RAG论文阅读笔记
  • linux常用命令 (3)——系统包管理
  • Firefox自定义备忘
  • SQL进阶:从基础语法到实战技巧
  • 性能测试工具Jmeter之java.net.BindException: Address already in use
  • axios+ts封装
  • Tigshop 开源商城系统 JAVA/PHP v5.1.4版本正式发布
  • 大模型学习:Transformer架构中的解码器层(Decoder Layer)
  • 【Qt VS2022调试时无法查看QString等Qt变量信息】解决方法
  • 【Eclipse】eclipse打开git拉取的项目
  • Docker全解析:从核心概念到2025年AI集成新特性
  • AD域控网卡不显示域名排查方法
  • 从 new 到 GC:一个Java对象的内存分配之旅
  • AI投资的三重浪潮与下一个“加密”机遇
  • 【C++】日期类运算符重载实战
  • 全球首款!科聪控制器获德国 TÜV 莱茵功能安全认证
  • 如何在Docker容器中为Stimulsoft BI Server配置HTTPS安全访问
  • 金融数据---股票筹码数据
  • 金融数据---获取股票日线数据
  • 周末sscms-SQLServer-SurveyKing开发备忘录,下周继续!
  • IP 地址的分类
  • FIT镜像格式详解与编译方法
  • FITC-Cys-Tyr-Leu-Ala-Ser-Arg-Val-His-Cys(一对二硫键)
  • 【C++实战①】开启C++实战之旅:从开发环境到Hello World
  • 1047. 删除字符串中的所有相邻重复项(栈与队列算法题)
  • MySQL一条SQL的执行流程详细解析。
  • 深度学习打卡第N6周:中文文本分类-Pytorch实现
  • vue3项目打包报错