mysql 1118 8126_ERROR 1118 (42000): Row size too large (> 8126).

最近在做数据库还原时候,遇到以下问题

ERROR 1118 (42000) at line 79532: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRnt row format, BLOB prefix of 768 bytes is stored inline.

解决思路

1,查资料

问题1:

Hello AllI have encounterd a problem on engine conversion from myisam to innodb, it shows error like:ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.To resolve following issue , i have change on my.cnf.my.cnfinnodb_file_format = Barracudainnodb_file_per_table = 1and used on alter command.Alter table engine=innodb ROW_FORMAT=DYNAMIC;It solves my issue but our team concern about the performance,security and possible error arise after following changes.So i reqest all of you , can any one please suggest me the better alternavite solution for current issue , and what will be the performance impact on this changes.thanks in advance

针对问题一的回答:

> performance,security and possible error ariseNo, no problem with any such things.To explain the changes:> innodb_file_format = Barracuda -- This is the latest format for storing data in InnoDB. The only drawback in the inability to migrate the table to an older version that does not support Barracuda. (This issue seems very unlikely.)> innodb_file_per_table = 1 -- This is preferred for "large" tables. It stores the data (and indexes) in a .ibd file for the table instead of in "ibdata1". It provides some benefits to future ALTERs.> Alter table engine=innodb ROW_FORMAT=DYNAMIC; -- There are several "ROW_FORMATs" in InnoDB. This one is fine.> performance -- There is probably no noticeable difference in performance among all the options changed above. (One exception is ROW_FORMAT=COMPRESSED.)> please suggest me the better alternavite solution for current issue -- The alternative is to change the schema, possibly involving "vertically" partitioning the table into two tables, possibly "normalizing" some of the columns, possibly not blindly using too-big values in VARCHAR(...), etc.I say "possibly" because I don't see your SHOW CREATE TABLE, nor do I understand what impact the changes might have on the rest of the schema and application.You could provide SHOW CREATE TABLE for further advice, but I doubt if there is anything terribly significant to advise you on.

我的解决方法:

查看自己的设置mysql> show GLOBAL VARIABLES LIKE '%file_format%';

+--------------------------+----------+

| Variable_name            | Value    |

+--------------------------+----------+

| innodb_file_format       | Antelope |

| innodb_file_format_check | ON       |

| innodb_file_format_max   | Antelope |

+--------------------------+----------+

mysql> show variables like '%per_table%';

+-----------------------+-------+

| Variable_name         | Value |

+-----------------------+-------+

| innodb_file_per_table | OFF   |

+-----------------------+-------+

1 row in set (0.03 sec)

修改参数:innodb_file_format = Barracuda

innodb_file_per_table = 1

or

set GLOBAL innodb_file_format = 'Barracuda';

检查修改后的结果:mysql> show variables like '%per_table%';

+-----------------------+-------+

| Variable_name         | Value |

+-----------------------+-------+

| innodb_file_per_table | ON    |

+-----------------------+-------+

1 row in set (0.00 sec)

mysql> show GLOBAL VARIABLES LIKE '%file_format%';

+--------------------------+-----------+

| Variable_name            | Value     |

+--------------------------+-----------+

| innodb_file_format       | Barracuda |

| innodb_file_format_check | ON        |

| innodb_file_format_max   | Barracuda |

+--------------------------+-----------+

3 rows in set (0.00 sec)

此时暂时不需要执行 以下命令也可以成功Alter table  engine=innodb ROW_FORMAT=DYNAMIC;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值