티스토리 뷰

개발/DB

[mysql] InnoDB error..

Jaeyeon Baek 2012. 12. 4. 11:44

mysqld 데몬이 올라오고 바로 down되버리는 증상이 있습니다. 디버깅을 위한 파일은 mysql의 db 설치 경로에 hostname.err 로 파일 이름이 있습니다.


파일 안의 내용은 대략 아래와 같은데 살펴보도록 합니다,

InnoDB: stored checksum 0, prior-to-4.0.14-form stored checksum 0
InnoDB: Page lsn 0 0, low 4 bytes of lsn at page end 0
InnoDB: Page number (if stored to page already) 0,
InnoDB: space id (if created with >= MySQL-4.1.1 and stored already) 0
121204 10:52:19InnoDB: Error: trying to access a stray pointer 0xac27bff8
InnoDB: buf pool start is at 0x2c26c000, end at 0x2ca6c000
InnoDB: Probable reason is database corruption or memory
InnoDB: corruption. If this happens in an InnoDB database recovery, see
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: how to force recovery.
121204 10:52:19InnoDB: Assertion failure in thread 715935984 in file ./../include/buf0buf.ic line 268
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: about forcing recovery.
121204 10:52:19 - mysqld got signal 11;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help diagnose
the problem, but since we have already crashed, something is definitely wrong
and this may fail.

key_buffer_size=0
read_buffer_size=131072
max_used_connections=0
max_connections=100
threads_connected=0
It is possible that mysqld could use up to 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = 217599 K
bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

121204 10:52:19  mysqld ended

일단 분명한건 InnoDB 쪽에 뭔가 문제가 있다는 뜻인데, web검색을 통해 살펴보면 key_buffer_size의 메모리 할당에 문제가 있기 때문인 경우도 있다고 합니다, 하지만 필자의 경우는 조금 달랐습니다. InnoDB에서 사용하는 logfile(ib_logfile0, ib_logfile1)이라고 하는 것이 깨졌든, 꼬였든 어떤 이유에서건 mysql과 정상적으로 연동이 되지 않는 경우입니다. 해당 파일은 mysqld 서비스가 시작될때 없는 경우 생성되는 파일로, 문제가 있는 파일을 삭제하고 다시 mysqld서비스를 재시작 할 경우 정상적으로 서비스가 됩니다. 또는 InnoDB를 사용하지 않는 경우 아래와 같이 해당기능을 skip할 경우 ib_logfile0, ib_logfile1이 생성되지 않기 때문에 잠재적인 문제를 막을 수도 있습니다.

$ ./mysqld_safe --skip-innodb

innodb의 사용 여부는 mysql에 접속해서 아래와 같이 확인할 수 있습니다.

mysql> show variables like 'have_innodb';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_innodb   | YES      | 
+---------------+----------+
1 row in set (0.00 sec)

mysql>

일각에서는 innodb의 성능이 mysqld에서 기본 제공되는 엔진인 MyIsSAM에 비해 월등한 성능을 자랑하므로, skip하는 방법은 올바르지 않을 수 있습니다. 각 상황에 맞도록 사용해야 합니다,


ib_logfile0, ib_logfile1 파일이 왜 문제가 발생 되었는지에 대한 원인은 분석 후에 포스팅 하는걸로 하겠습니다,

'개발 > DB' 카테고리의 다른 글

[mysql] 특정 문자열이 포함된 데이터 검색  (0) 2013.01.24
[mysql] 현재 실행중인 process 확인  (0) 2013.01.24
[mysql] db file 리스트  (0) 2012.10.26
[mysql] & 연산자 활용  (0) 2012.03.23
[mysql] ip주소 변환  (0) 2011.12.01
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday