MySQL 에 접속해서 데이터를 가져오는 쿼리를 던졌을때 테이블에 댇한 키파일이 깨졌다는 메세지가 뜬다.
"Warning: mysql_query(): Unable to save result set in c:\apm_setup\htdocs\mac\list.htm on line 76
Incorrect key file for table: 'glog'. Try to repair it"
구체적으로 이런 로그를 볼 수 있다.
이것은 비정상적으로 시스템이 종료되거나 DB서버를 비정상적으로 종료했을 때 DB 테이블의 유효성이 깨져서 생기는 문제이다.
정확한 원인을 파악하기 위해서는 해당 DB에 접속해서 다음과 같은 쿼리를 던져 본다.
mysql> analyze table glog;
+------------------+---------+----------+------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+---------+----------+------------------------------------------------------------------+
| gdata.glog | analyze | error | Found key at page 5097472 that points to record outside datafile | | gdata.glog | analyze | error | Corrupt |
+------------------+---------+----------+------------------------------------------------------------------+
2 rows in set (0.08 sec)
+------------------+---------+----------+------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+---------+----------+------------------------------------------------------------------+
| gdata.glog | analyze | error | Found key at page 5097472 that points to record outside datafile | | gdata.glog | analyze | error | Corrupt |
+------------------+---------+----------+------------------------------------------------------------------+
2 rows in set (0.08 sec)
이걸 고치기 위해서는 다음과 같은 쿼리를 던진다.
mysql> repair table glog;
+------------------+--------+----------+----------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+--------+----------+----------------------------------------------+
| gdata.glog | repair | warning | Number of rows changed from 249503 to 249501 | | gdata.glog | repair | status | OK |
+------------------+--------+----------+----------------------------------------------+
2 rows in set (25.22 sec)
+------------------+--------+----------+----------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+--------+----------+----------------------------------------------+
| gdata.glog | repair | warning | Number of rows changed from 249503 to 249501 | | gdata.glog | repair | status | OK |
+------------------+--------+----------+----------------------------------------------+
2 rows in set (25.22 sec)
다시 한번 확인해보면 고쳐진것을 확인할 수 있다.
mysql> analyze table glog;
+------------------+---------+----------+-----------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+---------+----------+-----------------------------+
| gdata.glog | analyze | status | Table is already up to date |
+------------------+---------+----------+-----------------------------+
1 row in set (0.00 sec)
+------------------+---------+----------+-----------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+---------+----------+-----------------------------+
| gdata.glog | analyze | status | Table is already up to date |
+------------------+---------+----------+-----------------------------+
1 row in set (0.00 sec)