MySQL 서버 운영시 볼 수 있는 오류중 난감한것중 하나 입니다.
왜냐하면 데이터가 날라갔을 수 있기 때문이죠.
여러가지 원인이 있을 수 있는데 우선은 디스크용량 부터 보는것이 좋습니다.
그 외에는 갑자기 꺼진적이 있었는지 ..
그렇지 않다면 바쁜 서버여서? 운이 나쁜것입니다.
ERROR 1194 (HY000): Table is marked as crashed and should be repaired
오랬동안 사용하지 않았던 테이블인데 엔진을 변경하는데 오류가 발생한 경우 입니다.
다행이 check table 명령 후 repair table 명령으로 살려진 경우 입니다.
그렇기 때문에 백업은 선택이 아니리 필수 입니다. 백업은 주요한 업무중 하나 입니다.
Last_SQL_Errno: 1194
Last_SQL_Error: Error 'Table 'test2020' is marked as crashed and should be repaired' on query. Default database: 'test'. Query: 'ALTER TABLE test.test2020 ENGINE='innodb''
일반적으로는 select도 안되는경우가 있고 상황은 다양합니다.
select는 되는데 insert update같은것이 안되는 경우가 있습니다.
더 당황스런 것은 select 잘 되는데 like 명령으로 뭐좀 찾으려 했더니 나오기도 합니다.
이럴때 해볼 수 있는것은 우선 아래와 같습니다.
첫번째, check table 테이블명;
그리고 자신이 내렸던 명령을 내려 봅니다.
두번째, repair table 테이블명; 문제 없는지 확인 합니다.
mysql> check table test.test_2020;
+---------------------------+-------+----------+---------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------------------------+-------+----------+---------------------------------------------+
| test.test_2020 | check | error | Wrong bytesec: 0-0-0 at linkstart: 50002080 |
| test.test_2020 | check | error | Corrupt |
+---------------------------+-------+----------+---------------------------------------------+
2 rows in set (4.95 sec)
mysql> check table test.test_2020;
+---------------------------+-------+----------+---------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------------------------+-------+----------+---------------------------------------------+
| test.test_2020 | check | warning | Table is marked as crashed |
| test.test_2020 | check | error | Wrong bytesec: 0-0-0 at linkstart: 50002080 |
| test.test_2020 | check | error | Corrupt |
+---------------------------+-------+----------+---------------------------------------------+
3 rows in set (2.92 sec)
mysql> repair table test.test_2020;
+---------------------------+--------+----------+-------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------------------------+--------+----------+-------------------------------------------------+
| test.test_2020 | repair | info | Wrong bytesec: 0- 0- 0 at 50002080; Skipped |
| test.test_2020 | repair | status | OK |
+---------------------------+--------+----------+-------------------------------------------------+
2 rows in set (33.31 sec)
mysql> check table test.test_2020;
+---------------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------------------+-------+----------+----------+
| test.test_2020 | check | status | OK |
+---------------------------+-------+----------+----------+
1 row in set (5.67 sec)
세번째, 강제복구를 해보는것인데 경험상 테이블 깨지기 때문에 추천하지 않습니다.
이 경우는 반드시 테이블 복사를 한 후 해야 합니다. 그리고 MySQL 서버 shutdown 시킨 후 해야 합니다.
그리고 같은 증상이 반복적으로 일어 날 수 있는데요.
repair 테이블 명령으로 처리해서 잘 되던것이 또 그런다.
그렇다면 전체를 덤프받아서 기존 테이블 삭제하고 다시 생성해보세요.
* PHP를 할줄 알면 아래를 참고하세요
- php를 이용한 MySQL, MariaDB DB 테이블 체크 프로그램 > PHP