前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在修改Mysql表结构时不影响读写?

如何在修改Mysql表结构时不影响读写?

作者头像
dys
发布2018-04-03 17:58:31
2.9K0
发布2018-04-03 17:58:31
举报

线上数据库难免会有修改表结构的需求,MySQL 在修改表结构时会锁表,这就会影响读写操作,小表还好,一会儿就修改完成了,但大表会比较麻烦,下面看一个解决方案

解决思路

(1)新建一个表,结构就是要修改后的结构

(2)在旧表上建立触发器,旧表更新数据时同步到新表

(3)把旧表数据复制到新表

(4)数据同步完成后,执行重命名操作,交换新旧表

(5)删除旧表及触发器

实现方式

这个解决思路已经有了很成熟的工具,数据库服务公司 Percona 提供了 MySQL Toolkit 工具集,其中的 pt-online-schema-change 就是用来进行线上的表结构修改,不会阻塞读写

  • 使用示例

pt-online-schema-change

--user=root --password=111111

--host=192.168.31.157

--alter "modify name CHAR(50)"

D=sakila,t=test

--execute

从结果信息中可以看出这个工具的执行过程

  • 参数说明

--user、--password、--host

数据库的连接信息

--alter

指定要执行的修改操作,例如修改表结构的语句为:

alter table test modify name varchar(60);

这个参数的值就是 “alter table test ”后面的部分

D=sakila,t=test

指定数据库和表名

--execute

确定执行修改操作,有个与其对应的参数 --dry-run,并不真正执行,可以看到生成的执行语句,用来了解其执行步骤与细节

  • 安装方法

下载地址

https://www.percona.com/downloads/percona-toolkit/

centos7 安装示例

下载 rpm 版本

安装依赖包

yum install epel-release-7-5.noarch

yum install perl-DBD-MySQL

yum install perl-Digest-MD5

yum install perl-Config-Tiny

yum install perl-Log-Dispatch

yum install perl-Parallel-ForkManager

yum install -y rrdtool perl-rrdtool rrdtool-devel perl-Params-Validate

安装 toolkit

rpm -ivh percona-toolkit.rpm

安装完成后就可以直接执行了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档