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

MySQL海量表增加字段

方案1.直接新增字段  结果:不行太卡

方案2.修改原表名    结果:不行太卡

方案3:pt-online-schema-change

  1. 首先它会新建一张一模一样的表,表名一般是_new后缀

  2. 然后在这个新表执行更改字段操作

  3. 然后在原表上加三个触发器,DELETE/UPDATE/INSERT,将原表中要执行的语句也在新表中执行

  4. 最后将原表的数据拷贝到新表中,然后替换掉原表

下载:

wget percona.com/get/percona-toolkit.tar.gz

 备份链接:

https://downloads.percona.com/downloads/percona-toolkit/2.2.13/tarball/percona-toolkit-2.2.13.tar.gz

安装:


tar xzvf percona-toolkit-2.2.13.tar.gz

cd percona-toolkit-2.2.13

perl Makefile.PL

make

make install

验证:

pt-query-digest --help

使用:

新增列:

pt-online-schema-change --alter "ADD COLUMN age INT NOT NULL DEFAULT 0" D=mydb,t=users --user=root --password=123456 --host=localhost --execute

 修改字段类型:

pt-online-schema-change --alter "MODIFY COLUMN age BIGINT" D=mydb,t=users --user=root --password=123456 --host=localhost --execute

 增加索引:

pt-online-schema-change --alter "ADD INDEX idx_name (name)" D=mydb,t=users --user=root --password=123456 --host=localhost --execute

 删除列:

pt-online-schema-change --alter "DROP COLUMN old_col" D=mydb,t=mytable --user=root --password=123456 --host=localhost --execute

 关键参数:

--alter	指定 ALTER TABLE 变更内容
--execute	正式执行(默认不会执行,需加)
--dry-run	只模拟,不执行
--chunk-size=N	控制每次复制的数据量(默认 1000)
--chunk-time=0.5	设定复制时间,自动调整 chunk-size
--max-load="Threads_running=50"	服务器负载过高时暂停
--nocheck-replication-filters	忽略复制过滤器检查
--nodrop-old-table	保留旧表(防止误删数据)
--set-vars innodb_lock_wait_timeout=50	避免长时间锁等待

执行:

建议先模拟一次:

pt-online-schema-change --alter "ADD COLUMN user VARCHAR(500);" D=database,t=MyTable--user=root --password=123456 --host=192.168.1.1 --port=3306  --dry-run

然后执行:

nohup pt-online-schema-change --alter "ADD COLUMN user VARCHAR(500);" D=database,t=MyTable--user=root --password=123456 --host=192.168.1.1 --port=3306  --dry-run > pt_osc.log 2>&1 &

相关文章:

  • 抽象代数:群论
  • MySQL 慢查询日志开启与问题排查指南
  • aws S3利用lambda edge实现图片缩放、质量转换等常规图片处理功能
  • qiankun微前端主应用给子应用传组件
  • C++17和C++20引入的新特性
  • 【CC2530 教程 一】lAR Embedded Workbench创建CC2530基础工程
  • 数据结构--二叉排序树
  • 【Spring篇】Spring的生命周期
  • C语言枚举类型详解
  • [特殊字符] 2025蓝桥杯备赛Day11——P11041 [蓝桥杯 2024 省 Java B] 报数游戏
  • Java 列表复制与对象引用
  • Python学习第二十五天
  • 10 个pygame经典小游戏
  • 装饰器模式 (Decorator Pattern)
  • SpringCloud消息总线:Bus事件广播与配置动态刷新
  • 基于硅基流动平台API构建定制化AI服务的实践指南
  • 大数据学习(88)-zookeeper实现的高可用(HA)
  • 【JSqlParser】Java使用JSqlParser解析SQL语句总结
  • 垃圾回收学习
  • “thrust“ has no member “device“
  • dedecms模板安装/seo常用的工具
  • 做彩票的网站吗/太原网站优化公司
  • 做水果网站平台/免费自制app软件
  • php做网站最容易/google seo是什么意思
  • wordpress仿安卓主题下载/上海搜索seo
  • 电子商务服务网站/旺道seo优化