当前位置: 首页 > 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 &

http://www.dtcms.com/a/90978.html

相关文章:

  • 抽象代数:群论
  • 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“
  • 视觉Transformer架构的前沿优化技术与高效部署
  • Linux 驱动总线中的 ACPI 设备匹配机制是怎么回事儿?【最大特点是设备的自动发现和热插拔性能良好】
  • vue 组件开发
  • C++运动控制卡开发实践指南
  • 【pm2运行ts的终极解决方案】使用pm2+ tsx 运行 TypeScript 文件指南
  • 3.25-3 request断言
  • 代码随想录算法训练营第二十天 | 字符串 | 反转字符串、替换空格、翻转字符串里的单词(很多基础方法)和左旋转字符串
  • Windows下docker使用教程
  • 【C++特殊类的设计】
  • 和鲸科技执行总裁殷自强受邀主讲华中附属同济医院大模型应用通识首期课程