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
Mysql 에서 글을 겁나 길게 썼더니 발생한 오류이다.
InnoDB 는 한 레코드 삽입에 있어서 8000 byte 의 크기 제한이 있다. 그 크기를 넘어섰다고 경고를 하는 것이다.
해당 컬럼 타입을 TEXT 나 BLOB 으로 변경하거나 ROW_FORMAT 을 DYNAMIC 이나 COMPRESSED 로 변경하란다.
이미 BLOB 으로 되어 있고 COMPRESSED 로 포맷을 변경하였는데도 동일한 에러가 발생하였다.
여러 삽질 끝에 테이블 row_format을 compressed 로 변경하기 위해서는,
my.inf 나 AWS 의 Parameter Groups 에서 innodb_file_format 을 Barracuda 로 설정해야 한다는 것을 알았다.
Barracuda 는 DYNAMIC 과 COMPRESSED 을 지원하는 InnoDB 파일 형식이다.
먼저 file_format 을 바꾸고,
innodb_file_format = Barracuda
( > SET GLOBAL innodb_file_format = barracuda; )
row_format 을 바꾼다.
ALTER TABLE mytable
ENGINE=InnoDB
ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;
그리고 정상적으로 변경이 되었는지 확인한다.
> show variables like "%innodb_file%";
innodb_file_format Barracuda
innodb_file_format_check ON
innodb_file_format_max Barracuda
innodb_file_per_table ON
> show table status like 'mytable';
Row_format : Compressed
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.