1

주제: db table 깨짐 현상 방지책은 업나요?

사실 이곳에 글을 올리는게 맞지 않을지도 모르지만....

마땅히 질문할곳도 없어서 질문 드립니다.

현재 1.6.4 확장판을 mySQL 4.1 버젼과 사용중인데요.

얼마전 로그인이 무작정 안되는 현상이 발생하여 이곳에서 자료를 찾아보던중

tc_sessions 테이블이 깨졌을 경우 이런 현상이 발생한다는 글을 보고...

설마하며 테이블을 점검하던중....

허거덩.... 정말 테이블이 깨졌더군요.

tc_sessions , tc_sessionvisits(?) 이러케 2개의 테이블이 깨졌던데요.

다행이 전날 백업한 자료가 있어서 어렵지 않게 복구는 하였지만...

한번 그러고나니... 다음에도 같은 일이 발생할수 있을거 같더라구요.

왜 mySQL 테이블이 깨지는걸까요?

혹시 방지책은 없는걸까여?

2

답글: db table 깨짐 현상 방지책은 업나요?

mySQL 세션 테이블이 깨지는 현상은 접속이 왕창 몰렸을 때 발생합니다. 방문자가 새로 올 때 마다 데이터를 넣었다 뺐다 하기 때문입니다. smile

두 테이블에 들어가는 정보는 임시로 저장되므로 내용은 전혀 중요하지 않습니다. 깨진 경우에는 REPAIR TABLE tc_sessions,tc_sessionvisits 를 통해서 복원하시면 됩니다.

원래 테이블 자동 복구 기능이 들어 있는데, 제대로 안돌아가는 경우가 가끔 생기는 듯 하네요. 1.7.6에는 세션 테이블 검사 후 자동 복구 기능을 보완하도록 하겠습니다.

덧) 로드가 왕창 몰리는 경우에는 1.8 알파의 경우 memcache 모드를 켜면 세션을 서버 메모리에서 관리합니다. 1.7에서는 두 테이블을 기본 모드인 MYISAM에서 MEMORY 타입으로 바꾸면 심한 로드에도 깨지지 않습니다. 이 경우 sessions 테이블의 data 필드가 text 사이즈인데, MEMORY 타입의 테이블은 text 타입의 필드를 지원하지 않기 때문에 열개 이하의 다중 블로그를 운영하신다면 VARCHAR(2048) 정도로 속성을 변경해 주시면 됩니다.

"Everything looks different on the other side."

-Ian Malcomm, from Michael Crichton's 'The Jurassic Park'

3

답글: db table 깨짐 현상 방지책은 업나요?

inureyes 작성:

덧) 로드가 왕창 몰리는 경우에는 1.8 알파의 경우 memcache 모드를 켜면 세션을 서버 메모리에서 관리합니다. 1.7에서는 두 테이블을 기본 모드인 MYISAM에서 MEMORY 타입으로 바꾸면 심한 로드에도 깨지지 않습니다. 이 경우 sessions 테이블의 data 필드가 text 사이즈인데, MEMORY 타입의 테이블은 text 타입의 필드를 지원하지 않기 때문에 열개 이하의 다중 블로그를 운영하신다면 VARCHAR(2048) 정도로 속성을 변경해 주시면 됩니다.

이게... 제가 어제 쿨엔님과 OpenID 로그인 버그 테스트하면 알게 된 사실인데요, Session 테이블의 data 필드에 68KB 이상의 데이터가 들어가는 경우도 있습니다.; MySQL에서 strict mode가 활성화되어 있다면 짤리는 정도가 아니고 멈춰버리죠;;; 따라서 2048 정도의 작은 크기로 하면 오픈아이디 로그인에 문제가 생길 수 있습니다. orz

문제의 답은 우리 안에 있다.
내면에 귀를 기울여 보자.