MySQL MYSQL 5.7 이후 ROW_FORMAT=FIXED 사용 불가
페이지 정보
본문
테이블을 구성하는 row는 다음과 같이 3가지 형식으로 분류할 수 있다.
1. MySQL Storage Engine
고정포맷(fixed row format)
컬럼타입으로 varchar, text, blob을 사용하지 않을때, 가능하다면 가급적 고정포맷을 사용하는 것이 좋다.
동적포맷보다 메모리사용이 적고, 인덱스파일크기도 작아진다. 당연히 속도또한 향상된다.
파일구조의 고정길이레코드가 고정포맷, 가변길이레코드가 동적포맷이라고 생각해주면 이해하기 쉬울 것이다.
※ MySQL 5.7 이후 지원안함
동적포맷(dynamic row format)
컬럼타입으로 varchar, text, blob을 사용할때. 주의) varchar(3)보다 작다면 고정포맷이 사용됨
고정포맷에 비해 디스크사용에 있어 효율성을 가지나, 속도는 상대적으로 느리다.
테이블에 빈번한 레코드의 수정/삭제가 이루어지면 단편화가 유발하므로 주기적인 optimize table이 요구된다.
text, blob은 별도로 저장되므로, optimize table을 수행할 필요성이 없다.
압축표맷(compressed row format)
읽기전용이다. myisampack명령어로 만들 수 있다.
디스크공간을 적게 차지하므로 CD에 백업할때 사용하면 되겠다.
MyISAM은 동시성제어를 위해 테이블단위 락킹(table-level locking)을 사용한다.
참고로, 대부분의 상용 DBMS들은 행단위 락킹(row-level locking)을 사용한다.
행단위 락킹이 더 세밀하고 정밀한 제어가 가능한 반면, 테이블단위 락킹은 단순하다.
2. MySQL 5.7 덤프파일을 업로드시 에러
$ mysql -h 디비호스트 -u디비아이디 -p 디비네임 < old.sql
Enter password:
ERROR 1031 (HY000) at line 11696: Table storage engine for '디비테이블' doesn't have this option
터미널에서 내용중에 포함되어 있는지 확인은 아래와 같이 하면 찾을수 있습니다.
$ cat old.sql | grep '=FIXED'
) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
ROW_FORMAT=FIXED 를 ROW_FORMAT=COMPACT 로 수정하면 오류없이 해결 가능합니다.
참고자료
https://qastack.kr/magento/94325/how-to-fix-mysql-error-1031-table-storage-engine-for-catalog-product-relation
https://sjs0270.tistory.com/77
1. MySQL Storage Engine
고정포맷(fixed row format)
컬럼타입으로 varchar, text, blob을 사용하지 않을때, 가능하다면 가급적 고정포맷을 사용하는 것이 좋다.
동적포맷보다 메모리사용이 적고, 인덱스파일크기도 작아진다. 당연히 속도또한 향상된다.
파일구조의 고정길이레코드가 고정포맷, 가변길이레코드가 동적포맷이라고 생각해주면 이해하기 쉬울 것이다.
※ MySQL 5.7 이후 지원안함
동적포맷(dynamic row format)
컬럼타입으로 varchar, text, blob을 사용할때. 주의) varchar(3)보다 작다면 고정포맷이 사용됨
고정포맷에 비해 디스크사용에 있어 효율성을 가지나, 속도는 상대적으로 느리다.
테이블에 빈번한 레코드의 수정/삭제가 이루어지면 단편화가 유발하므로 주기적인 optimize table이 요구된다.
text, blob은 별도로 저장되므로, optimize table을 수행할 필요성이 없다.
압축표맷(compressed row format)
읽기전용이다. myisampack명령어로 만들 수 있다.
디스크공간을 적게 차지하므로 CD에 백업할때 사용하면 되겠다.
MyISAM은 동시성제어를 위해 테이블단위 락킹(table-level locking)을 사용한다.
참고로, 대부분의 상용 DBMS들은 행단위 락킹(row-level locking)을 사용한다.
행단위 락킹이 더 세밀하고 정밀한 제어가 가능한 반면, 테이블단위 락킹은 단순하다.
2. MySQL 5.7 덤프파일을 업로드시 에러
$ mysql -h 디비호스트 -u디비아이디 -p 디비네임 < old.sql
Enter password:
ERROR 1031 (HY000) at line 11696: Table storage engine for '디비테이블' doesn't have this option
터미널에서 내용중에 포함되어 있는지 확인은 아래와 같이 하면 찾을수 있습니다.
$ cat old.sql | grep '=FIXED'
) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
ROW_FORMAT=FIXED 를 ROW_FORMAT=COMPACT 로 수정하면 오류없이 해결 가능합니다.
참고자료
https://qastack.kr/magento/94325/how-to-fix-mysql-error-1031-table-storage-engine-for-catalog-product-relation
https://sjs0270.tistory.com/77
댓글목록
등록된 댓글이 없습니다.