포럼
MyISAM을 InnoDB로 변경 + 튜닝하려면 어떻게 하면 좋을까요?
2014.12.04 14:59
MySQL 5.5를 쓰고 있는데, 1.7 업그레이드 이후 table lock이 너무 심하게 걸려 확인해보니 MyISAM을 사용하고 있더군요.
그래서 InnoDB로 engine을 변경하려고 고민 중인데, alter table 테이블_이름 engine=InnoDB; 같은 방법을 사용하면 무리가 많다고 들었습니다.
그럼 어떻게 하야 데이터 손상 없이 안전하게 엔진을 바꿀 수 있을까 하고 고민하다가..
1. --no-data 옵션을 넣고 mysqldump를 받아서 별개의 DB에 테이블 스키마만 집어 넣고,
2. 여기서 alter table을 사용해 InnoDB로 엔진을 변경해 다시 dump받아두고,
3. 이어 --no-create-info를 이용해 데이터만 dump받아둔 다음,
4. 기존 DB를 drop시키고 새로 DB를 만들어 InnoDB로 변경한 테이블 스키마 파일을 끼워넣고,
5. 마지막으로 data file을 넣으면 되지 않을까 생각하고 있습니다.
쓰다 보니 굉장히 비효율적으로 작업하는게 아닌가 싶기도 하고, 여하튼 어떻게 하면 무리 없이 InnoDB로 엔진을 변경할 수 있을까요? 조언 부탁드리겠습니다.
참, 그리고 InnoDB는 어떻게 튜닝을 하면 좋을까요?
댓글 4
-
Lansi
2014.12.04 15:19
-
기진곰
2014.12.04 16:06
덤프 받았다가 다시 복구하는 데 소요되는 시간과 서버 자원이나,
그냥 alter table 하는데 소요되는 시간과 서버 자원이나, 큰 차이가 없습니다.
오히려 제자리에서 alter table 하는 쪽이 효율이 더 높을 수도 있어요.
제일 중요한 건 작업 전에 사이트를 닫아두어야 한다는 점입니다.
작업 도중에 데이터가 변경되면 이상하게 꼬이는 수가 있어요.
-
카르마
2014.12.05 15:52
제가 사용했던 쉘스크립트입니다.
#!/bin/bash mysql -u root -p$2 -e "show tables in $1;" | tail --lines=+2 | xargs -i echo "ALTER TABLE {} ENGINE=INNODB;" >alter_table.sql mysql --database=$1 -p$2 < alter_table.sql
-
체피
2014.12.05 23:51
역시 제가 생각했던건 너무 돌아가는 길인 것 같아요.
좋은 해결책 알려주신 Lansi 님, 기진곰 님, 카르마 님 모두 감사합니다!
export로 sql 받아서 engine=InnoDB로 다 바꿔준 다음에 import 하면 깔끔합니다.