mysql利用merge存储引擎分表的方法
博客专区 > zyt_1978 的博客 > 博客详情
mysql利用merge存储引擎分表的方法
zyt_1978 发表于1年前
mysql利用merge存储引擎分表的方法
  • 发表于 1年前
  • 阅读 14
  • 收藏 8
  • 点赞 0
  • 评论 0

华为云·免费上云实践>>>   

1、创建分表,和主表的表结构相同,这里创建3个表

1
2
CREATE TABLE 新表 LIKE 旧表;
CREATE TABLE nqhuacom1 LIKE nqhuacom;

2、复制主表数据到分表

1
2
3
4
5
6
INSERT INTO nqhuacom1 SELECT * FROM nqhuacom LIMIT 50000;
INSERT INTO nqhuacom2 SELECT * FROM nqhuacom LIMIT 50001,50000;
INSERT INTO nqhuacom3 SELECT * FROM nqhuacom LIMIT 100002,50000;
INSERT INTO nqhuacom4 SELECT * FROM nqhuacom LIMIT 150003,50000;
INSERT INTO nqhuacom5 SELECT * FROM nqhuacom LIMIT 200004,50000;
INSERT INTO nqhuacom6 SELECT * FROM nqhuacom LIMIT 250005,50000;

3、创建汇总表nqhuacomall

1
2
CREATE TABLE nqhuacomAll LIKE nqhuacom;
ALTER TABLE csdnall  ENGINE=MERGE UNION=(nqhuacom1,nqhuacom2,nqhuacom3,nqhuacom4,nqhuacom5,nqhuacom6) INSERT_METHOD=LAST;

创建Mysql Merge表的参数 INSERT_METHOD有几个参数 。
LAST 如果你执行insert 指令来操作merge表时,插入操作会把数据添加到最后一个子表中。FIRST 同理,执行插入数据时会把数据添加到第一个子表中。

——————————————————————————————

不停机修改mysql表结构

同样还是members表,前期设计的表结构不尽合理,随着数据库不断运行,其冗余数据也是增长巨大,使用了下面的方法来处理:
先创建一个临时表:

1
2
/*创建临时表*/
CREATE TABLE members_tmp LIKE members

然后修改members_tmp的表结构为新结构,接着使用上面那个for循环来导出数据,因为1000万的数据一次性导出是不对的,mid是主键,一个区间一个区间的导,基本是一次导出5万条吧,这里略去了,接着重命名将新表替换上去:

1
2
/*这是个颇为经典的语句哈*/
RENAME TABLE members TO members_bak,members_tmp TO members;

就是这样,基本可以做到无损失,无需停机更新表结构,但实际上RENAME期间表是被锁死的,所以选择在线少的时候操作是一个技巧。经过这个操作,使得原先8G多的表,一下子变成了2G多

共有 人打赏支持
粉丝 8
博文 166
码字总数 21058
×
zyt_1978
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: