最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

pt-online-schema-change进行MySQL表的主键变更

来源:懂视网 责编:小采 时间:2020-11-09 09:17:53
文档

pt-online-schema-change进行MySQL表的主键变更

pt-online-schema-change进行MySQL表的主键变更:业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键。这种需求在实际生产中还是蛮多的。下面,看看pt-online-schema-change解决这类问题的处理方式。 首先,创建一张测试表create table t2(c1 int primary key, c2 i
推荐度:
导读pt-online-schema-change进行MySQL表的主键变更:业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键。这种需求在实际生产中还是蛮多的。下面,看看pt-online-schema-change解决这类问题的处理方式。 首先,创建一张测试表create table t2(c1 int primary key, c2 i

业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键。这种需求在实际生产中还是蛮多的。

下面,看看pt-online-schema-change解决这类问题的处理方式。

首先,创建一张测试表

create table t2(c1 int primary key, c2 int);

构造测试数据

delimiter //
create procedure p1()
begin
 declare v1 int default 1;
 set autocommit=0;
 while v1 <=100000 do
 insert into test.t2(c1,c2) values(v1,v1+100);
 set v1=v1+1;
 if v1%1000 =0 then
 commit;
 end if;
 end while;
end //
delimiter ;
call p1;

下面,开始使用pt-online-schema-change对t2表进行主键变更

1. 对c1列加上unique key

# pt-online-schema-change --execute --alter "modify c1 int unique key" --print D=test,t=t2

此时,t2表的表结构如下:

mysql> show create table t2\G
*************************** 1. row ***************************
 Table: t2
Create Table: CREATE TABLE `t2` (
 `c1` int(11) NOT NULL DEFAULT '0',
 `c2` int(11) DEFAULT NULL,
 PRIMARY KEY (`c1`),
 UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.03 sec)

2. 删除c1列上的主键

# pt-online-schema-change --execute --alter "drop primary key" --no-check-alter --print D=test,t=t2

注意:删除主键需加上 --no-check-alter选项

此时,t2的表结构如下:

mysql> show create table t2\G
*************************** 1. row ***************************
 Table: t2
Create Table: CREATE TABLE `t2` (
 `c1` int(11) NOT NULL DEFAULT '0',
 `c2` int(11) DEFAULT NULL,
 UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.05 sec)

3. 添加c2列上的主键

# pt-online-schema-change --execute --alter "modify c2 int primary key" --print D=test,t=t2

此时,t2的表结构如下:

mysql> show create table t2\G
*************************** 1. row ***************************
 Table: t2
Create Table: CREATE TABLE `t2` (
 `c1` int(11) NOT NULL DEFAULT '0',
 `c2` int(11) NOT NULL,
 PRIMARY KEY (`c2`),
 UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.02 sec)

4. 删除c1列上的unique key

# pt-online-schema-change --execute --alter "drop key c1" --print D=test,t=t2

此时,t2的主键变更完成

mysql> show create table t2\G
*************************** 1. row ***************************
 Table: t2
Create Table: CREATE TABLE `t2` (
 `c1` int(11) NOT NULL DEFAULT '0',
 `c2` int(11) NOT NULL,
 PRIMARY KEY (`c2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.02 sec)

文档

pt-online-schema-change进行MySQL表的主键变更

pt-online-schema-change进行MySQL表的主键变更:业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键。这种需求在实际生产中还是蛮多的。下面,看看pt-online-schema-change解决这类问题的处理方式。 首先,创建一张测试表create table t2(c1 int primary key, c2 i
推荐度:
标签: 主键 mysql 表的
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top