mysql数据迁移报错Specified key was too long; max key length is 767 bytes

目录

场景:

说明:

 疑问:

 解决:

 验证:


场景:

线上项目支持的过程中遇到mysql库表结构和数据由A库迁移到B库上提示Specified key was too long; max key length is 767 bytes报错,第一次遇到特此记录一下。

说明:

源库和目标库的版本一样。

从源库中导出单个一个表结构

注:直接在目标库中创建提示报错Specified key was too long; max key length is 767 bytes然而将primary key('seq_code','seq_key')去掉就创建成功了,因此定位到主键这里报错了

 疑问:

mysql版本一样,相同的表结构为什么在源库中能创建,而在目标库中无法创建呢??

解决:

网上搜了Mysql InnoDB引擎表的索引,默认索引键前缀限制为767字节,当你建的索引长度为varchar类型时候,使用默认的varchar(255),而你的编码又字符集又是utf8mb4,4*255 > 767,显然太大,所以报错。

    解决办法:

        1.可以设置为:767/4大小以内;

        2.可以调整 启用innodb_large_prefix,加大索引键长度限制。

验证:

show variables like '%innodb_large_prefix

源库的innodb_large_prefix变量的开关是启用的,而目标库的开关是关闭的,将目标库该属性设置成ON即可,由于是线上环境,执行无权限,让有权限的人设置一下即可。

set GLOBAL innodb_large_prefix = 'ON'

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值