美文网首页
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知识点

    Mysql中有哪几种锁? MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁 表级锁:开销小,加锁快,不...

  • 27、说说什么是锁升级?

    说说什么是锁升级? MySQL 行锁只能加在索引上,如果操作不走索引,就会升级为表锁。因为 InnoDB 的行锁是...

  • mysql不锁表备份

    参考:https://blog.csdn.net/sinat_24354307/article/details/1...

  • MySQL锁篇

    1 MySQL锁介绍 2 MySQL表级锁 2.1 表级锁介绍 ​ 表级锁由SQL layer实现。M...

  • Mysql 锁详解

    Mysql 锁详解一、前言二、MyISAM2.1 MyISAM表锁2.2 查询表级锁争用情况2.3 MySQL表级...

  • mysql不锁表主从同步

    本来的步骤 主库锁库 2.线上数据库数据提取 3.开始迁移数据到从库(scp传送过去) 4.新库删除之前的数据(看...

  • mysql锁

    mysql锁 性能:乐观锁,悲观锁 操作类型:读锁,写锁,都属于悲观锁 操作粒度:行锁,表锁 乐观锁:一种思想,通...

  • mysql锁记录

    mysql锁 性能:乐观锁,悲观锁 操作类型:读锁,写锁,都属于悲观锁 操作粒度:行锁,表锁 乐观锁:一种思想,通...

  • MySQL锁机制

    MySQL主要有表锁,行锁和页锁,页锁用得少,本文主要介绍表锁和行锁。 一、锁的分类 从对数据的操作类型来分,可以...

  • MySQL 锁之二——表锁

    1、概述 MySQL 表级锁是以单个表为粒度的锁,InnoDB 和 MyISAM 引擎都支持表级锁; 2、表锁分类...

网友评论

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

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