Percona Toolkit解决大表DDL操作锁表的问题

背景

记得之前有个前同事在前同事群里突然发来一个消息,求教如何给大表增加字段。她们当时试图给一个线上大表直接通过Alter Table的方式增加字段。但是,由于数据量过大,怎么也升级不成功,情急之下发消息出来求教。
确实,企业级应用中的数据库库表的数据量往往都比较大,针对这些大表的表结构升级(DDL)会对线上系统造成较大的影响。比如,给一张百万级别数据量的表增加一个字段,在没有任何工具辅助的情况下,往往会锁表几分钟到几十分钟不等,导致长时间的业务功能不可用。
当时,有人给前同事出招,提出拷贝出来一张新表,在新表上增加字段,完成后再覆盖老表(通过该表名的方式)。这种方案能解决升级的时候不影响线上使用,但是它存在升级过程中如果有新数据进来的时候这部门新数据会丢失的问题。

那有没有更好的解决方案呢?答案是有的。针对大表的DDL操作,可以借助Percona Toolkit实现,具体方式如下。

方案

CentOS安装Percona Toolkit

检查安装所需的依赖包是否已安装,如果未安装或安装的不全,则执行第二步中的yum install命令进行安装

rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL

安装依赖(缺失的情况下才执行安装)

yum install perl-DBI
yum install perl-DBD-MySQL
yum install perl-Time-HiRes
yum install perl-IO-Socket-SSL

安装Percona Release

sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

安装Percona Yum仓库,这里安装MySQL5.6对应的仓库

sudo percona-release enable ps-56 release

更多仓库与具体数据库版本对应关系

RepositoryProduct Packages
ps-56Percona Server for MySQL 5.6
ps-57Percona Server for MySQL 5.7
ps-80Percona Server for MySQL 8.0

安装Percona Toolkit

sudo yum install percona-toolkit

安装成功后,就可以使用Percona Toolkit来执行在线扩展数据库

实践

  • 在线添加索引
pt-online-schema-change -uroot -h192.168.10.8 -p'your password' -S /tmp/mysql.sock --alter='add fulltext index `full_sys_shop_goods_product_name`(`product_name`)' --execute D=test,t=sys_shop_goods 

Percona 执行过程中的一些现象,拷贝出来了一张表
在这里插入图片描述
在老表上添加了三个触发器
在这里插入图片描述

  • 在线添加字段
pt-online-schema-change -uroot -h192.168.10.8 -p'your password' -S /tmp/mysql.sock --alter='add column new_field varchar(100) not null default '' comment "xxxxxxxx"' --execute D=test,t=sys_shop_goods
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值